mirror of
https://github.com/documize/community.git
synced 2025-07-20 21:59:42 +02:00
35 lines
861 B
Go
35 lines
861 B
Go
package logsink
|
|
|
|
import (
|
|
"sync/atomic"
|
|
"unsafe"
|
|
)
|
|
|
|
func fatalMessageStore(e savedEntry) {
|
|
// Only put a new one in if we haven't assigned before.
|
|
atomic.CompareAndSwapPointer(&fatalMessage, nil, unsafe.Pointer(&e))
|
|
}
|
|
|
|
var fatalMessage unsafe.Pointer // savedEntry stored with CompareAndSwapPointer
|
|
|
|
// FatalMessage returns the Meta and message contents of the first message
|
|
// logged with Fatal severity, or false if none has occurred.
|
|
func FatalMessage() (*Meta, []byte, bool) {
|
|
e := (*savedEntry)(atomic.LoadPointer(&fatalMessage))
|
|
if e == nil {
|
|
return nil, nil, false
|
|
}
|
|
return e.meta, e.msg, true
|
|
}
|
|
|
|
// DoNotUseRacyFatalMessage is FatalMessage, but worse.
|
|
//
|
|
//go:norace
|
|
//go:nosplit
|
|
func DoNotUseRacyFatalMessage() (*Meta, []byte, bool) {
|
|
e := (*savedEntry)(fatalMessage)
|
|
if e == nil {
|
|
return nil, nil, false
|
|
}
|
|
return e.meta, e.msg, true
|
|
}
|