client-go: copying object to fix data race (#103148)

Kubernetes-commit: ce257266aa7f3f104e656b722310be32e95a9cb5
This commit is contained in:
novahe 2021-07-05 21:55:55 +08:00 committed by Kubernetes Publisher
parent b267864032
commit b7e5fce706

View File

@ -400,7 +400,8 @@ func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns st
if _, ok = t.objects[gvr][namespacedName]; ok {
if replaceExisting {
for _, w := range t.getWatches(gvr, ns) {
w.Modify(obj)
// To avoid the object from being accidentally modified by watcher
w.Modify(obj.DeepCopyObject())
}
t.objects[gvr][namespacedName] = obj
return nil
@ -416,7 +417,8 @@ func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns st
t.objects[gvr][namespacedName] = obj
for _, w := range t.getWatches(gvr, ns) {
w.Add(obj)
// To avoid the object from being accidentally modified by watcher
w.Add(obj.DeepCopyObject())
}
return nil
@ -456,7 +458,7 @@ func (t *tracker) Delete(gvr schema.GroupVersionResource, ns, name string) error
delete(objs, namespacedName)
for _, w := range t.getWatches(gvr, ns) {
w.Delete(obj)
w.Delete(obj.DeepCopyObject())
}
return nil
}