Merge pull request #105383 from tkashem/lifecycle-signal

make lifecycle signal thread safe
This commit is contained in:
Kubernetes Prow Robot 2021-09-30 18:33:57 -07:00 committed by GitHub
commit dec5153eb0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -16,6 +16,10 @@ limitations under the License.
package server
import (
"sync"
)
/*
We make an attempt here to identify the events that take place during
lifecycle of the apiserver.
@ -143,22 +147,21 @@ func newLifecycleSignals() lifecycleSignals {
func newNamedChannelWrapper(name string) lifecycleSignal {
return &namedChannelWrapper{
name: name,
once: sync.Once{},
ch: make(chan struct{}),
}
}
type namedChannelWrapper struct {
name string
once sync.Once
ch chan struct{}
}
func (e *namedChannelWrapper) Signal() {
select {
case <-e.ch:
// already closed, don't close again.
default:
e.once.Do(func() {
close(e.ch)
}
})
}
func (e *namedChannelWrapper) Signaled() <-chan struct{} {