Merge: - Web: flush the bufferred response data before performing global operations

Close #1617

* commit 'e24143a1962c16763cb73f4e41b30117bcf0d80c':
  - Web: flush the bufferred response data before performing global operations
This commit is contained in:
Simon Zolin 2020-04-24 16:22:16 +03:00
commit d01407c1a0
3 changed files with 12 additions and 4 deletions

View File

@ -351,6 +351,11 @@ func (web *Web) handleInstallConfigure(w http.ResponseWriter, r *http.Request) {
registerControlHandlers()
returnOK(w)
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
// this needs to be done in a goroutine because Shutdown() is a blocking call, and it will block
// until all requests are finished, and _we_ are inside a request right now, so it will block indefinitely
if restartHTTP {
@ -358,8 +363,6 @@ func (web *Web) handleInstallConfigure(w http.ResponseWriter, r *http.Request) {
_ = Context.web.httpServer.Shutdown(context.TODO())
}()
}
returnOK(w)
}
func (web *Web) registerInstallHandlers() {

View File

@ -548,7 +548,9 @@ func handleUpdate(w http.ResponseWriter, r *http.Request) {
}
returnOK(w)
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
time.Sleep(time.Second) // wait (hopefully) until response is sent (not sure whether it's really necessary)
go finishUpdate(u)
}

View File

@ -279,11 +279,14 @@ func (t *TLSMod) handleTLSConfigure(w http.ResponseWriter, r *http.Request) {
tlsConfigStatus: t.status,
}
marshalTLS(w, data2)
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
// this needs to be done in a goroutine because Shutdown() is a blocking call, and it will block
// until all requests are finished, and _we_ are inside a request right now, so it will block indefinitely
if restartHTTPS {
go func() {
time.Sleep(time.Second) // TODO: could not find a way to reliably know that data was fully sent to client by https server, so we wait a bit to let response through before closing the server
Context.web.TLSConfigChanged(data)
}()
}