...

Source file src/runtime/debuglog_on.go

     1	// Copyright 2019 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	// +build debuglog
     6	
     7	package runtime
     8	
     9	const dlogEnabled = true
    10	
    11	// dlogPerM is the per-M debug log data. This is embedded in the m
    12	// struct.
    13	type dlogPerM struct {
    14		dlogCache *dlogger
    15	}
    16	
    17	// getCachedDlogger returns a cached dlogger if it can do so
    18	// efficiently, or nil otherwise. The returned dlogger will be owned.
    19	func getCachedDlogger() *dlogger {
    20		mp := acquirem()
    21		// We don't return a cached dlogger if we're running on the
    22		// signal stack in case the signal arrived while in
    23		// get/putCachedDlogger. (Too bad we don't have non-atomic
    24		// exchange!)
    25		var l *dlogger
    26		if getg() != mp.gsignal {
    27			l = mp.dlogCache
    28			mp.dlogCache = nil
    29		}
    30		releasem(mp)
    31		return l
    32	}
    33	
    34	// putCachedDlogger attempts to return l to the local cache. It
    35	// returns false if this fails.
    36	func putCachedDlogger(l *dlogger) bool {
    37		mp := acquirem()
    38		if getg() != mp.gsignal && mp.dlogCache == nil {
    39			mp.dlogCache = l
    40			releasem(mp)
    41			return true
    42		}
    43		releasem(mp)
    44		return false
    45	}
    46	

View as plain text