From 4a08a693b754740148bd75d040a7bfa6be1a3d30 Mon Sep 17 00:00:00 2001 From: Nikhita Raghunath Date: Thu, 3 Aug 2017 21:38:04 +0530 Subject: [PATCH] fix data race in storage (during addition) --- .../pkg/apiserver/customresource_handler.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index cf60827ae7..feb97447f2 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -343,8 +343,17 @@ func (r *crdHandler) getServingInfoFor(crd *apiextensions.CustomResourceDefiniti storage: storage, requestScope: requestScope, } - storageMap[crd.UID] = ret - r.customStorage.Store(storageMap) + + storageMap2 := make(crdStorageMap, len(storageMap)) + + // Copy because we cannot write to storageMap without a race + // as it is used without locking elsewhere + for k, v := range storageMap { + storageMap2[k] = v + } + + storageMap2[crd.UID] = ret + r.customStorage.Store(storageMap2) return ret }