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