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  //go: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