Skip to content

Commit 9617a6e

Browse files
committed
Urgent logging fix for gossip
This is an urgent logging fix to a bug that might break gossip tests. in op/go-logging/backend.go, the log invokes IsEnabledFor which goes to a global field defaultBackend that IsEnabledFor method for that global field invokes GetLevel which reads from a map. If a logger is initalized at the same time another goroutine reads from the map, a concurrent read-write would occur and will result in panic. Change-Id: Ief788f3da722aa38b7c743179d6dd1a1dc60936a Signed-off-by: Yacov Manevich <[email protected]>
1 parent 36bc7e7 commit 9617a6e

File tree

1 file changed

+33
-34
lines changed

1 file changed

+33
-34
lines changed

gossip/util/logging.go

+33-34
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ func init() {
4343
}
4444

4545
type Logger struct {
46-
lock *sync.Mutex
4746
logger logging.Logger
4847
module string
4948
}
@@ -79,7 +78,7 @@ func GetLogger(module string, peerId string) *Logger {
7978
return nil
8079
}
8180
logging.SetLevel(lvl, module)
82-
lgr := &Logger{lock: &sync.Mutex{}}
81+
lgr := &Logger{}
8382
lgr.logger = *logging.MustGetLogger(module)
8483
lgr.logger.ExtraCalldepth++
8584
lgr.module = module
@@ -88,97 +87,97 @@ func GetLogger(module string, peerId string) *Logger {
8887
}
8988

9089
func (l *Logger) Fatal(args ...interface{}) {
91-
l.lock.Lock()
92-
defer l.lock.Unlock()
90+
lock.Lock()
91+
defer lock.Unlock()
9392
l.logger.Fatal(args)
9493
}
9594

9695
func (l *Logger) Fatalf(format string, args ...interface{}) {
97-
l.lock.Lock()
98-
defer l.lock.Unlock()
96+
lock.Lock()
97+
defer lock.Unlock()
9998
l.logger.Fatalf(format, args)
10099
}
101100

102101
func (l *Logger) Panic(args ...interface{}) {
103-
l.lock.Lock()
104-
defer l.lock.Unlock()
102+
lock.Lock()
103+
defer lock.Unlock()
105104
l.logger.Panic(args)
106105
}
107106

108107
func (l *Logger) Panicf(format string, args ...interface{}) {
109-
l.lock.Lock()
110-
defer l.lock.Unlock()
108+
lock.Lock()
109+
defer lock.Unlock()
111110
l.logger.Panicf(format, args)
112111
}
113112

114113
func (l *Logger) Critical(args ...interface{}) {
115-
l.lock.Lock()
116-
defer l.lock.Unlock()
114+
lock.Lock()
115+
defer lock.Unlock()
117116
l.logger.Critical(args)
118117
}
119118

120119
func (l *Logger) Criticalf(format string, args ...interface{}) {
121-
l.lock.Lock()
122-
defer l.lock.Unlock()
120+
lock.Lock()
121+
defer lock.Unlock()
123122
l.logger.Criticalf(format, args)
124123
}
125124

126125
func (l *Logger) Error(args ...interface{}) {
127-
l.lock.Lock()
128-
defer l.lock.Unlock()
126+
lock.Lock()
127+
defer lock.Unlock()
129128
l.logger.Error(args)
130129
}
131130

132131
func (l *Logger) Errorf(format string, args ...interface{}) {
133-
l.lock.Lock()
134-
defer l.lock.Unlock()
132+
lock.Lock()
133+
defer lock.Unlock()
135134
l.logger.Errorf(format, args)
136135
}
137136

138137
func (l *Logger) Warning(args ...interface{}) {
139-
l.lock.Lock()
140-
defer l.lock.Unlock()
138+
lock.Lock()
139+
defer lock.Unlock()
141140
l.logger.Warning(args)
142141
}
143142

144143
func (l *Logger) Warningf(format string, args ...interface{}) {
145-
l.lock.Lock()
146-
defer l.lock.Unlock()
144+
lock.Lock()
145+
defer lock.Unlock()
147146
l.logger.Warningf(format, args)
148147
}
149148

150149
func (l *Logger) Notice(args ...interface{}) {
151-
l.lock.Lock()
152-
defer l.lock.Unlock()
150+
lock.Lock()
151+
defer lock.Unlock()
153152
l.logger.Notice(args)
154153
}
155154

156155
func (l *Logger) Noticef(format string, args ...interface{}) {
157-
l.lock.Lock()
158-
defer l.lock.Unlock()
156+
lock.Lock()
157+
defer lock.Unlock()
159158
l.logger.Noticef(format, args)
160159
}
161160

162161
func (l *Logger) Info(args ...interface{}) {
163-
l.lock.Lock()
164-
defer l.lock.Unlock()
162+
lock.Lock()
163+
defer lock.Unlock()
165164
l.logger.Info(args)
166165
}
167166

168167
func (l *Logger) Infof(format string, args ...interface{}) {
169-
l.lock.Lock()
170-
defer l.lock.Unlock()
168+
lock.Lock()
169+
defer lock.Unlock()
171170
l.logger.Infof(format, args)
172171
}
173172

174173
func (l *Logger) Debug(args ...interface{}) {
175-
l.lock.Lock()
176-
defer l.lock.Unlock()
174+
lock.Lock()
175+
defer lock.Unlock()
177176
l.logger.Debug(args)
178177
}
179178

180179
func (l *Logger) Debugf(format string, args ...interface{}) {
181-
l.lock.Lock()
182-
defer l.lock.Unlock()
180+
lock.Lock()
181+
defer lock.Unlock()
183182
l.logger.Debugf(format, args)
184183
}

0 commit comments

Comments
 (0)