@@ -474,16 +474,16 @@ type timeHeader struct {
474474}
475475
476476var timeHeaderPointers struct {
477- utc unsafe .Pointer
478- local unsafe .Pointer
477+ utc atomic .Pointer [ timeHeader ]
478+ local atomic .Pointer [ timeHeader ]
479479}
480480
481481type timestampCache struct {
482482 sec int64
483483 nsec int32
484484}
485485
486- var timestampCachePointer unsafe .Pointer // * timestampCache
486+ var timestampCachePointer atomic .Pointer [ timestampCache ]
487487var timestampCacheMu sync.Mutex
488488var timestampCacheStop , timestampCacheDone chan struct {}
489489
@@ -511,10 +511,10 @@ func EnableTimeCache(interval time.Duration) {
511511 if tc .sec == 0 {
512512 tc .sec , tc .nsec , _ = now ()
513513 }
514- atomic . StorePointer ( & timestampCachePointer , unsafe . Pointer (& tc ) )
514+ timestampCachePointer . Store (& tc )
515515 go func () {
516516 defer close (done )
517- defer atomic . StorePointer ( & timestampCachePointer , nil )
517+ defer timestampCachePointer . Store ( nil )
518518 defer ticker .Stop ()
519519 for {
520520 select {
@@ -526,7 +526,7 @@ func EnableTimeCache(interval time.Duration) {
526526 if tc .sec == 0 {
527527 tc .sec , tc .nsec , _ = now ()
528528 }
529- atomic . StorePointer ( & timestampCachePointer , unsafe . Pointer (& tc ) )
529+ timestampCachePointer . Store (& tc )
530530 }
531531 }
532532 }()
@@ -563,8 +563,7 @@ func (l *Logger) header(level Level) *Entry {
563563 format = "2006-01-02T15:04:05.000Z07:00"
564564 }
565565 var now time.Time
566- if p := atomic .LoadPointer (& timestampCachePointer ); p != nil {
567- tt := (* timestampCache )(p )
566+ if tt := timestampCachePointer .Load (); tt != nil {
568567 now = time .Unix (tt .sec , int64 (tt .nsec ))
569568 } else {
570569 now = Now ()
@@ -579,8 +578,7 @@ func (l *Logger) header(level Level) *Entry {
579578 case "" , time .RFC3339 , time .RFC3339Nano :
580579 var sec int64
581580 var nsec int32
582- if p := atomic .LoadPointer (& timestampCachePointer ); p != nil {
583- tt := (* timestampCache )(p )
581+ if tt := timestampCachePointer .Load (); tt != nil {
584582 sec , nsec = tt .sec , tt .nsec
585583 }
586584 if sec == 0 {
@@ -589,15 +587,15 @@ func (l *Logger) header(level Level) *Entry {
589587 if sec == 0 {
590588 sec , nsec , _ = now ()
591589 }
592- var tp * unsafe .Pointer
590+ var tp * atomic .Pointer [ timeHeader ]
593591 if offset == 0 {
594592 tp = & timeHeaderPointers .utc
595593 } else {
596594 tp = & timeHeaderPointers .local
597595 }
598596 var tmp [40 ]byte // up to 37 bytes, e.g. "2006-01-02T15:04:05.999999999Z07:00"
599597 tmp [0 ] = '"'
600- if c := ( * timeHeader )( atomic . LoadPointer ( tp ) ); c != nil && c .sec == sec {
598+ if c := tp . Load ( ); c != nil && c .sec == sec {
601599 copy (tmp [1 :20 ], c .b [:])
602600 } else {
603601 // date time
@@ -638,7 +636,7 @@ func (l *Logger) header(level Level) *Entry {
638636 nc .b [18 ] = smallsString [second + 1 ]
639637 // publish for the next line
640638 copy (tmp [1 :20 ], nc .b [:])
641- atomic . StorePointer ( tp , unsafe . Pointer (nc ) )
639+ tp . Store (nc )
642640 }
643641 // fractional seconds and timezone, which differ between formats
644642 i := 20
@@ -704,8 +702,8 @@ func (l *Logger) header(level Level) *Entry {
704702 e .buf = append (e .buf , tmp [:i ]... )
705703 case TimeFormatUnix :
706704 var sec int64
707- if p := atomic . LoadPointer ( & timestampCachePointer ); p != nil {
708- sec = ( * timestampCache )( p ) .sec
705+ if tt := timestampCachePointer . Load ( ); tt != nil {
706+ sec = tt .sec
709707 }
710708 if sec == 0 {
711709 sec , _ = walltime ()
@@ -740,8 +738,7 @@ func (l *Logger) header(level Level) *Entry {
740738 case TimeFormatUnixMs :
741739 var sec int64
742740 var nsec int32
743- if p := atomic .LoadPointer (& timestampCachePointer ); p != nil {
744- tt := (* timestampCache )(p )
741+ if tt := timestampCachePointer .Load (); tt != nil {
745742 sec , nsec = tt .sec , tt .nsec
746743 }
747744 if sec == 0 {
@@ -783,8 +780,7 @@ func (l *Logger) header(level Level) *Entry {
783780 case TimeFormatUnixWithMs :
784781 var sec int64
785782 var nsec int32
786- if p := atomic .LoadPointer (& timestampCachePointer ); p != nil {
787- tt := (* timestampCache )(p )
783+ if tt := timestampCachePointer .Load (); tt != nil {
788784 sec , nsec = tt .sec , tt .nsec
789785 }
790786 if sec == 0 {
@@ -826,8 +822,7 @@ func (l *Logger) header(level Level) *Entry {
826822 e .buf = append (e .buf , tmp [:]... )
827823 default :
828824 var now time.Time
829- if p := atomic .LoadPointer (& timestampCachePointer ); p != nil {
830- tt := (* timestampCache )(p )
825+ if tt := timestampCachePointer .Load (); tt != nil {
831826 now = time .Unix (tt .sec , int64 (tt .nsec ))
832827 } else {
833828 now = Now ()
0 commit comments