...

Source file src/github.com/golang/glog/internal/logsink/logsink_fatal.go

Documentation: github.com/golang/glog/internal/logsink

     1  package logsink
     2  
     3  import (
     4  	"sync/atomic"
     5  	"unsafe"
     6  )
     7  
     8  func fatalMessageStore(e savedEntry) {
     9  	// Only put a new one in if we haven't assigned before.
    10  	atomic.CompareAndSwapPointer(&fatalMessage, nil, unsafe.Pointer(&e))
    11  }
    12  
    13  var fatalMessage unsafe.Pointer // savedEntry stored with CompareAndSwapPointer
    14  
    15  // FatalMessage returns the Meta and message contents of the first message
    16  // logged with Fatal severity, or false if none has occurred.
    17  func FatalMessage() (*Meta, []byte, bool) {
    18  	e := (*savedEntry)(atomic.LoadPointer(&fatalMessage))
    19  	if e == nil {
    20  		return nil, nil, false
    21  	}
    22  	return e.meta, e.msg, true
    23  }
    24  
    25  // DoNotUseRacyFatalMessage is FatalMessage, but worse.
    26  //
    27  //go:norace
    28  //go:nosplit
    29  func DoNotUseRacyFatalMessage() (*Meta, []byte, bool) {
    30  	e := (*savedEntry)(fatalMessage)
    31  	if e == nil {
    32  		return nil, nil, false
    33  	}
    34  	return e.meta, e.msg, true
    35  }
    36  

View as plain text