// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build debuglog
// +build debuglog

package runtime

const dlogEnabled = true

// dlogPerM is the per-M debug log data. This is embedded in the m
// struct.
type dlogPerM struct {
	dlogCache *dlogger
}

// getCachedDlogger returns a cached dlogger if it can do so
// efficiently, or nil otherwise. The returned dlogger will be owned.
func getCachedDlogger() *dlogger {
	mp := acquirem()
	// We don't return a cached dlogger if we're running on the
	// signal stack in case the signal arrived while in
	// get/putCachedDlogger. (Too bad we don't have non-atomic
	// exchange!)
	var l *dlogger
	if getg() != mp.gsignal {
		l = mp.dlogCache
		mp.dlogCache = nil
	}
	releasem(mp)
	return l
}

// putCachedDlogger attempts to return l to the local cache. It
// returns false if this fails.
func putCachedDlogger(l *dlogger) bool {
	mp := acquirem()
	if getg() != mp.gsignal && mp.dlogCache == nil {
		mp.dlogCache = l
		releasem(mp)
		return true
	}
	releasem(mp)
	return false
}
