From 31970780cc53f27e36786fc387c0ce48af87c3fd Mon Sep 17 00:00:00 2001 From: derekwaynecarr Date: Tue, 10 May 2016 15:59:34 -0400 Subject: [PATCH] Fix resource quota controller shutting down its worker threads --- .../resource_quota_controller.go | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/pkg/controller/resourcequota/resource_quota_controller.go b/pkg/controller/resourcequota/resource_quota_controller.go index cb965ef7ef8..a1e449d3c66 100644 --- a/pkg/controller/resourcequota/resource_quota_controller.go +++ b/pkg/controller/resourcequota/resource_quota_controller.go @@ -163,19 +163,24 @@ func (rq *ResourceQuotaController) enqueueResourceQuota(obj interface{}) { // worker runs a worker thread that just dequeues items, processes them, and marks them done. // It enforces that the syncHandler is never invoked concurrently with the same key. func (rq *ResourceQuotaController) worker() { + workFunc := func() bool { + key, quit := rq.queue.Get() + if quit { + return true + } + defer rq.queue.Done(key) + err := rq.syncHandler(key.(string)) + if err != nil { + utilruntime.HandleError(err) + rq.queue.Add(key) + } + return false + } for { - func() { - key, quit := rq.queue.Get() - if quit { - return - } - defer rq.queue.Done(key) - err := rq.syncHandler(key.(string)) - if err != nil { - utilruntime.HandleError(err) - rq.queue.Add(key) - } - }() + if quit := workFunc(); quit { + glog.Infof("resource quota controller worker shutting down") + return + } } }