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 }