|
|
@@ -74,6 +74,12 @@ type RunnableWithShutdownFns func(atShutdown, atTerminate func(context.Context, |
|
|
|
func (g *Manager) RunWithShutdownFns(run RunnableWithShutdownFns) { |
|
|
|
g.runningServerWaitGroup.Add(1) |
|
|
|
defer g.runningServerWaitGroup.Done() |
|
|
|
defer func() { |
|
|
|
if err := recover(); err != nil { |
|
|
|
log.Critical("PANIC during RunWithShutdownFns: %v\nStacktrace: %s", err, log.Stack(2)) |
|
|
|
g.doShutdown() |
|
|
|
} |
|
|
|
}() |
|
|
|
run(func(ctx context.Context, atShutdown func()) { |
|
|
|
go func() { |
|
|
|
select { |
|
|
@@ -103,6 +109,12 @@ type RunnableWithShutdownChan func(atShutdown <-chan struct{}, atTerminate Callb |
|
|
|
func (g *Manager) RunWithShutdownChan(run RunnableWithShutdownChan) { |
|
|
|
g.runningServerWaitGroup.Add(1) |
|
|
|
defer g.runningServerWaitGroup.Done() |
|
|
|
defer func() { |
|
|
|
if err := recover(); err != nil { |
|
|
|
log.Critical("PANIC during RunWithShutdownChan: %v\nStacktrace: %s", err, log.Stack(2)) |
|
|
|
g.doShutdown() |
|
|
|
} |
|
|
|
}() |
|
|
|
run(g.IsShutdown(), func(ctx context.Context, atTerminate func()) { |
|
|
|
g.RunAtTerminate(ctx, atTerminate) |
|
|
|
}) |
|
|
@@ -114,6 +126,12 @@ func (g *Manager) RunWithShutdownChan(run RunnableWithShutdownChan) { |
|
|
|
func (g *Manager) RunWithShutdownContext(run func(context.Context)) { |
|
|
|
g.runningServerWaitGroup.Add(1) |
|
|
|
defer g.runningServerWaitGroup.Done() |
|
|
|
defer func() { |
|
|
|
if err := recover(); err != nil { |
|
|
|
log.Critical("PANIC during RunWithShutdownContext: %v\nStacktrace: %s", err, log.Stack(2)) |
|
|
|
g.doShutdown() |
|
|
|
} |
|
|
|
}() |
|
|
|
run(g.ShutdownContext()) |
|
|
|
} |
|
|
|
|
|
|
@@ -121,18 +139,28 @@ func (g *Manager) RunWithShutdownContext(run func(context.Context)) { |
|
|
|
func (g *Manager) RunAtTerminate(ctx context.Context, terminate func()) { |
|
|
|
g.terminateWaitGroup.Add(1) |
|
|
|
go func() { |
|
|
|
defer g.terminateWaitGroup.Done() |
|
|
|
defer func() { |
|
|
|
if err := recover(); err != nil { |
|
|
|
log.Critical("PANIC during RunAtTerminate: %v\nStacktrace: %s", err, log.Stack(2)) |
|
|
|
} |
|
|
|
}() |
|
|
|
select { |
|
|
|
case <-g.IsTerminate(): |
|
|
|
terminate() |
|
|
|
case <-ctx.Done(): |
|
|
|
} |
|
|
|
g.terminateWaitGroup.Done() |
|
|
|
}() |
|
|
|
} |
|
|
|
|
|
|
|
// RunAtShutdown creates a go-routine to run the provided function at shutdown |
|
|
|
func (g *Manager) RunAtShutdown(ctx context.Context, shutdown func()) { |
|
|
|
go func() { |
|
|
|
defer func() { |
|
|
|
if err := recover(); err != nil { |
|
|
|
log.Critical("PANIC during RunAtShutdown: %v\nStacktrace: %s", err, log.Stack(2)) |
|
|
|
} |
|
|
|
}() |
|
|
|
select { |
|
|
|
case <-g.IsShutdown(): |
|
|
|
shutdown() |
|
|
@@ -144,6 +172,11 @@ func (g *Manager) RunAtShutdown(ctx context.Context, shutdown func()) { |
|
|
|
// RunAtHammer creates a go-routine to run the provided function at shutdown |
|
|
|
func (g *Manager) RunAtHammer(ctx context.Context, hammer func()) { |
|
|
|
go func() { |
|
|
|
defer func() { |
|
|
|
if err := recover(); err != nil { |
|
|
|
log.Critical("PANIC during RunAtHammer: %v\nStacktrace: %s", err, log.Stack(2)) |
|
|
|
} |
|
|
|
}() |
|
|
|
select { |
|
|
|
case <-g.IsHammer(): |
|
|
|
hammer() |