mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-09 23:24:05 -08:00
Guard closing quitCh with sync.Once to prevent double close (#8242)
* Guard closing quitCh with sync.Once to prevent double close Signed-off-by: Mitsuo Heijo <mitsuo.heijo@gmail.com>
This commit is contained in:
parent
acee998df6
commit
8b64b70fe4
13
web/web.go
13
web/web.go
|
@ -186,6 +186,7 @@ type Handler struct {
|
|||
|
||||
router *route.Router
|
||||
quitCh chan struct{}
|
||||
quitOnce sync.Once
|
||||
reloadCh chan chan error
|
||||
options *Options
|
||||
config *config.Config
|
||||
|
@ -918,12 +919,14 @@ func (h *Handler) version(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
func (h *Handler) quit(w http.ResponseWriter, r *http.Request) {
|
||||
select {
|
||||
case <-h.quitCh:
|
||||
fmt.Fprintf(w, "Termination already in progress.")
|
||||
default:
|
||||
fmt.Fprintf(w, "Requesting termination... Goodbye!")
|
||||
var closed bool
|
||||
h.quitOnce.Do(func() {
|
||||
closed = true
|
||||
close(h.quitCh)
|
||||
fmt.Fprintf(w, "Requesting termination... Goodbye!")
|
||||
})
|
||||
if !closed {
|
||||
fmt.Fprintf(w, "Termination already in progress.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue