@@ -17,6 +17,8 @@ limitations under the License.
17
17
package log
18
18
19
19
import (
20
+ "sync"
21
+
20
22
"github.com/go-logr/logr"
21
23
)
22
24
@@ -25,6 +27,7 @@ import (
25
27
type loggerPromise struct {
26
28
logger * DelegatingLogger
27
29
childPromises []* loggerPromise
30
+ promisesLock sync.Mutex
28
31
29
32
name * string
30
33
tags []interface {}
@@ -33,19 +36,27 @@ type loggerPromise struct {
33
36
// WithName provides a new Logger with the name appended
34
37
func (p * loggerPromise ) WithName (l * DelegatingLogger , name string ) * loggerPromise {
35
38
res := & loggerPromise {
36
- logger : l ,
37
- name : & name ,
39
+ logger : l ,
40
+ name : & name ,
41
+ promisesLock : sync.Mutex {},
38
42
}
43
+
44
+ p .promisesLock .Lock ()
45
+ defer p .promisesLock .Unlock ()
39
46
p .childPromises = append (p .childPromises , res )
40
47
return res
41
48
}
42
49
43
50
// WithValues provides a new Logger with the tags appended
44
51
func (p * loggerPromise ) WithValues (l * DelegatingLogger , tags ... interface {}) * loggerPromise {
45
52
res := & loggerPromise {
46
- logger : l ,
47
- tags : tags ,
53
+ logger : l ,
54
+ tags : tags ,
55
+ promisesLock : sync.Mutex {},
48
56
}
57
+
58
+ p .promisesLock .Lock ()
59
+ defer p .promisesLock .Unlock ()
49
60
p .childPromises = append (p .childPromises , res )
50
61
return res
51
62
}
@@ -119,7 +130,7 @@ func (l *DelegatingLogger) Fulfill(actual logr.Logger) {
119
130
func NewDelegatingLogger (initial logr.Logger ) * DelegatingLogger {
120
131
l := & DelegatingLogger {
121
132
Logger : initial ,
122
- promise : & loggerPromise {},
133
+ promise : & loggerPromise {promisesLock : sync. Mutex {} },
123
134
}
124
135
l .promise .logger = l
125
136
return l
0 commit comments