diff options
Diffstat (limited to 'src/runtime/trace.go')
-rw-r--r-- | src/runtime/trace.go | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/runtime/trace.go b/src/runtime/trace.go index 8f60de2b05..b50e1b2ce0 100644 --- a/src/runtime/trace.go +++ b/src/runtime/trace.go @@ -461,12 +461,13 @@ func ReadTrace() []byte { } // traceReader returns the trace reader that should be woken up, if any. +// Callers should first check that trace.enabled or trace.shutdown is set. func traceReader() *g { - if trace.reader == 0 || (trace.fullHead == 0 && !trace.shutdown) { + if !traceReaderAvailable() { return nil } lock(&trace.lock) - if trace.reader == 0 || (trace.fullHead == 0 && !trace.shutdown) { + if !traceReaderAvailable() { unlock(&trace.lock) return nil } @@ -476,6 +477,13 @@ func traceReader() *g { return gp } +// traceReaderAvailable returns true if the trace reader is not currently +// scheduled and should be. Callers should first check that trace.enabled +// or trace.shutdown is set. +func traceReaderAvailable() bool { + return trace.reader != 0 && (trace.fullHead != 0 || trace.shutdown) +} + // traceProcFree frees trace buffer associated with pp. func traceProcFree(pp *p) { buf := pp.tracebuf |