aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/trace.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/trace.go')
-rw-r--r--src/runtime/trace.go12
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