Skip to content

Commit 4276f38

Browse files
authored
Merge pull request #378 from pusher/deleg-race
🐛 Add mutex to loggerPromise to prevent races
2 parents 742c722 + 29b471a commit 4276f38

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

pkg/log/deleg.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package log
1818

1919
import (
20+
"sync"
21+
2022
"github.com/go-logr/logr"
2123
)
2224

@@ -25,6 +27,7 @@ import (
2527
type loggerPromise struct {
2628
logger *DelegatingLogger
2729
childPromises []*loggerPromise
30+
promisesLock sync.Mutex
2831

2932
name *string
3033
tags []interface{}
@@ -33,19 +36,27 @@ type loggerPromise struct {
3336
// WithName provides a new Logger with the name appended
3437
func (p *loggerPromise) WithName(l *DelegatingLogger, name string) *loggerPromise {
3538
res := &loggerPromise{
36-
logger: l,
37-
name: &name,
39+
logger: l,
40+
name: &name,
41+
promisesLock: sync.Mutex{},
3842
}
43+
44+
p.promisesLock.Lock()
45+
defer p.promisesLock.Unlock()
3946
p.childPromises = append(p.childPromises, res)
4047
return res
4148
}
4249

4350
// WithValues provides a new Logger with the tags appended
4451
func (p *loggerPromise) WithValues(l *DelegatingLogger, tags ...interface{}) *loggerPromise {
4552
res := &loggerPromise{
46-
logger: l,
47-
tags: tags,
53+
logger: l,
54+
tags: tags,
55+
promisesLock: sync.Mutex{},
4856
}
57+
58+
p.promisesLock.Lock()
59+
defer p.promisesLock.Unlock()
4960
p.childPromises = append(p.childPromises, res)
5061
return res
5162
}
@@ -119,7 +130,7 @@ func (l *DelegatingLogger) Fulfill(actual logr.Logger) {
119130
func NewDelegatingLogger(initial logr.Logger) *DelegatingLogger {
120131
l := &DelegatingLogger{
121132
Logger: initial,
122-
promise: &loggerPromise{},
133+
promise: &loggerPromise{promisesLock: sync.Mutex{}},
123134
}
124135
l.promise.logger = l
125136
return l

0 commit comments

Comments
 (0)