@@ -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 {
2628logger * DelegatingLogger
2729childPromises []* loggerPromise
30+ promisesLock sync.Mutex
2831
2932name * string
3033tags []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 {
3538res := & 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 ()
3946p .childPromises = append (p .childPromises , res )
4047return res
4148}
4249
4350// WithValues provides a new Logger with the tags appended
4451func (p * loggerPromise ) WithValues (l * DelegatingLogger , tags ... interface {}) * loggerPromise {
4552res := & 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 ()
4960p .childPromises = append (p .childPromises , res )
5061return res
5162}
@@ -119,7 +130,7 @@ func (l *DelegatingLogger) Fulfill(actual logr.Logger) {
119130func NewDelegatingLogger (initial logr.Logger ) * DelegatingLogger {
120131l := & DelegatingLogger {
121132Logger : initial ,
122- promise : & loggerPromise {},
133+ promise : & loggerPromise {promisesLock : sync. Mutex {} },
123134}
124135l .promise .logger = l
125136return l
0 commit comments