mirror of
https://github.com/matrix-org/dendrite
synced 2024-12-21 02:43:46 +01:00
46 lines
942 B
Go
46 lines
942 B
Go
|
package process
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
type ProcessContext struct {
|
||
|
wg *sync.WaitGroup // used to wait for components to shutdown
|
||
|
ctx context.Context // cancelled when Stop is called
|
||
|
shutdown context.CancelFunc // shut down Dendrite
|
||
|
}
|
||
|
|
||
|
func NewProcessContext() *ProcessContext {
|
||
|
ctx, shutdown := context.WithCancel(context.Background())
|
||
|
return &ProcessContext{
|
||
|
ctx: ctx,
|
||
|
shutdown: shutdown,
|
||
|
wg: &sync.WaitGroup{},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (b *ProcessContext) Context() context.Context {
|
||
|
return context.WithValue(b.ctx, "scope", "process") // nolint:staticcheck
|
||
|
}
|
||
|
|
||
|
func (b *ProcessContext) ComponentStarted() {
|
||
|
b.wg.Add(1)
|
||
|
}
|
||
|
|
||
|
func (b *ProcessContext) ComponentFinished() {
|
||
|
b.wg.Done()
|
||
|
}
|
||
|
|
||
|
func (b *ProcessContext) ShutdownDendrite() {
|
||
|
b.shutdown()
|
||
|
}
|
||
|
|
||
|
func (b *ProcessContext) WaitForShutdown() <-chan struct{} {
|
||
|
return b.ctx.Done()
|
||
|
}
|
||
|
|
||
|
func (b *ProcessContext) WaitForComponentsToFinish() {
|
||
|
b.wg.Wait()
|
||
|
}
|