Skip to content

Commit 92153e2

Browse files
committed
Fix race in logs
1 parent f4fa76c commit 92153e2

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

internal/logging/log.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"reflect"
99
"runtime"
1010
"strings"
11+
"sync/atomic"
12+
"time"
1113
)
1214

1315
type LogType string
@@ -21,29 +23,44 @@ const (
2123
var (
2224
accessLog *Logger //nolint:golint,gochecknoglobals
2325
errorLog *Logger //nolint:golint,gochecknoglobals
26+
isInit atomic.Bool
27+
loaded atomic.Bool
2428
)
2529

26-
func GetLogger(logType LogType) *Logger {
30+
func getLogger(logType LogType) *Logger {
2731
switch logType {
2832
case Access:
2933
if accessLog != nil {
3034
return accessLog
3135
}
3236
// Create access logger
33-
accessLog = createLogger(logType)
34-
return accessLog
37+
return createLogger(logType)
3538
case Error:
3639
if errorLog != nil {
3740
return errorLog
3841
}
3942
// Create error logger
40-
errorLog = createLogger(logType)
41-
return errorLog
43+
return createLogger(logType)
4244
default:
4345
panic("Logging failed")
4446
}
4547
}
4648

49+
func GetLogger(logType LogType) *Logger {
50+
lastInit := isInit.Swap(true)
51+
if !lastInit {
52+
logger := getLogger(logType)
53+
loaded.Store(true)
54+
return logger
55+
}
56+
for !loaded.Load() {
57+
const loadDelay = 100 * time.Nanosecond
58+
time.Sleep(loadDelay)
59+
}
60+
61+
return getLogger(logType)
62+
}
63+
4764
func createLogger(logType LogType) *Logger {
4865
var logFile *os.File
4966
switch runtime.GOOS {

0 commit comments

Comments
 (0)