Track run status explicitly rather than non-nil check on stopCh

parent 23881a90
...@@ -171,9 +171,7 @@ func Run(s *options.CMServer) error { ...@@ -171,9 +171,7 @@ func Run(s *options.CMServer) error {
} }
if !s.LeaderElection.LeaderElect { if !s.LeaderElection.LeaderElect {
stopCh := make(chan struct{}) run(wait.NeverStop)
defer close(stopCh)
run(stopCh)
panic("unreachable") panic("unreachable")
} }
......
...@@ -83,13 +83,14 @@ type GraphBuilder struct { ...@@ -83,13 +83,14 @@ type GraphBuilder struct {
// After that it is safe to start them here, before that it is not. // After that it is safe to start them here, before that it is not.
informersStarted <-chan struct{} informersStarted <-chan struct{}
// stopCh drives shutdown. If it is nil, it indicates that Run() has not been // stopCh drives shutdown. When a receive from it unblocks, monitors will shut down.
// called yet. If it is non-nil, then when closed it indicates everything
// should shut down.
//
// This channel is also protected by monitorLock. // This channel is also protected by monitorLock.
stopCh <-chan struct{} stopCh <-chan struct{}
// running tracks whether Run() has been called.
// it is protected by monitorLock.
running bool
// metaOnlyClientPool uses a special codec, which removes fields except for // metaOnlyClientPool uses a special codec, which removes fields except for
// apiVersion, kind, and metadata during decoding. // apiVersion, kind, and metadata during decoding.
metaOnlyClientPool dynamic.ClientPool metaOnlyClientPool dynamic.ClientPool
...@@ -275,7 +276,7 @@ func (gb *GraphBuilder) startMonitors() { ...@@ -275,7 +276,7 @@ func (gb *GraphBuilder) startMonitors() {
gb.monitorLock.Lock() gb.monitorLock.Lock()
defer gb.monitorLock.Unlock() defer gb.monitorLock.Unlock()
if gb.stopCh == nil { if !gb.running {
return return
} }
...@@ -325,6 +326,7 @@ func (gb *GraphBuilder) Run(stopCh <-chan struct{}) { ...@@ -325,6 +326,7 @@ func (gb *GraphBuilder) Run(stopCh <-chan struct{}) {
// Set up the stop channel. // Set up the stop channel.
gb.monitorLock.Lock() gb.monitorLock.Lock()
gb.stopCh = stopCh gb.stopCh = stopCh
gb.running = true
gb.monitorLock.Unlock() gb.monitorLock.Unlock()
// Start monitors and begin change processing until the stop channel is // Start monitors and begin change processing until the stop channel is
......
...@@ -74,13 +74,14 @@ type QuotaMonitor struct { ...@@ -74,13 +74,14 @@ type QuotaMonitor struct {
// After that it is safe to start them here, before that it is not. // After that it is safe to start them here, before that it is not.
informersStarted <-chan struct{} informersStarted <-chan struct{}
// stopCh drives shutdown. If it is nil, it indicates that Run() has not been // stopCh drives shutdown. When a receive from it unblocks, monitors will shut down.
// called yet. If it is non-nil, then when closed it indicates everything
// should shut down.
//
// This channel is also protected by monitorLock. // This channel is also protected by monitorLock.
stopCh <-chan struct{} stopCh <-chan struct{}
// running tracks whether Run() has been called.
// it is protected by monitorLock.
running bool
// monitors are the producer of the resourceChanges queue // monitors are the producer of the resourceChanges queue
resourceChanges workqueue.RateLimitingInterface resourceChanges workqueue.RateLimitingInterface
...@@ -241,7 +242,7 @@ func (qm *QuotaMonitor) startMonitors() { ...@@ -241,7 +242,7 @@ func (qm *QuotaMonitor) startMonitors() {
qm.monitorLock.Lock() qm.monitorLock.Lock()
defer qm.monitorLock.Unlock() defer qm.monitorLock.Unlock()
if qm.stopCh == nil { if !qm.running {
return return
} }
...@@ -291,6 +292,7 @@ func (qm *QuotaMonitor) Run(stopCh <-chan struct{}) { ...@@ -291,6 +292,7 @@ func (qm *QuotaMonitor) Run(stopCh <-chan struct{}) {
// Set up the stop channel. // Set up the stop channel.
qm.monitorLock.Lock() qm.monitorLock.Lock()
qm.stopCh = stopCh qm.stopCh = stopCh
qm.running = true
qm.monitorLock.Unlock() qm.monitorLock.Unlock()
// Start monitors and begin change processing until the stop channel is // Start monitors and begin change processing until the stop channel is
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment