logtail: allow multiple calls to Shutdown

Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
pull/7368/head
David Crawshaw 2 years ago
parent daa2f1c66e
commit 46467e39c2

@ -198,8 +198,9 @@ type Logger struct {
procSequence uint64 procSequence uint64
flushTimer *time.Timer // used when flushDelay is >0 flushTimer *time.Timer // used when flushDelay is >0
shutdownStart chan struct{} // closed when shutdown begins shutdownStartMu sync.Mutex // guards the closing of shutdownStart
shutdownDone chan struct{} // closed when shutdown complete shutdownStart chan struct{} // closed when shutdown begins
shutdownDone chan struct{} // closed when shutdown complete
} }
// SetVerbosityLevel controls the verbosity level that should be // SetVerbosityLevel controls the verbosity level that should be
@ -240,7 +241,16 @@ func (l *Logger) Shutdown(ctx context.Context) error {
close(done) close(done)
}() }()
l.shutdownStartMu.Lock()
select {
case <-l.shutdownStart:
l.shutdownStartMu.Unlock()
return nil
default:
}
close(l.shutdownStart) close(l.shutdownStart)
l.shutdownStartMu.Unlock()
io.WriteString(l, "logger closing down\n") io.WriteString(l, "logger closing down\n")
<-done <-done

Loading…
Cancel
Save