Expose Done and Err in Shutdown service

Signed-off-by: Maksym Pavlenko <pavlenko.maksym@gmail.com>
This commit is contained in:
Maksym Pavlenko 2022-11-16 22:03:44 -08:00
parent 344da9edb2
commit aaf59efd20

View File

@ -37,6 +37,11 @@ type Service interface {
// the shutdown channel is closed. A callback error will propagate to the // the shutdown channel is closed. A callback error will propagate to the
// context error // context error
RegisterCallback(func(context.Context) error) RegisterCallback(func(context.Context) error)
// Done returns a channel that's closed when all shutdown callbacks are invoked.
Done() <-chan struct{}
// Err returns nil if Done is not yet closed.
// If Done is closed, Err returns first failed callback error or ErrShutdown.
Err() error
} }
// WithShutdown returns a context which is similar to a cancel context, but // WithShutdown returns a context which is similar to a cancel context, but
@ -99,6 +104,7 @@ func (s *shutdownService) Err() error {
defer s.mu.Unlock() defer s.mu.Unlock()
return s.err return s.err
} }
func (s *shutdownService) RegisterCallback(fn func(context.Context) error) { func (s *shutdownService) RegisterCallback(fn func(context.Context) error) {
s.mu.Lock() s.mu.Lock()
defer s.mu.Unlock() defer s.mu.Unlock()