@@ -17,6 +17,8 @@ limitations under the License.
1717package log
1818
1919import (
20+ "sync"
21+
2022 "github.com/go-logr/logr"
2123)
2224
@@ -25,6 +27,7 @@ import (
2527type 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
3437func (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
4451func (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) {
119130func 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