Browse Source

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>
pull/8249/head
Mitsuo Heijo 4 years ago committed by GitHub
parent
commit
8b64b70fe4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 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…
Cancel
Save