| 1234567891011121314151617181920212223242526272829303132333435 |
- 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
- }
|