diff --git a/lib/api/api.go b/lib/api/api.go index 727675465..330169d80 100644 --- a/lib/api/api.go +++ b/lib/api/api.go @@ -415,7 +415,13 @@ func (s *service) Serve(ctx context.Context) error { // Restart due to listen/serve failure l.Warnln("GUI/API:", err, "(restarting)") } - srv.Close() + // Give it a moment to shut down gracefully, e.g. if we are restarting + // due to a config change through the API, let that finish successfully. + timeout, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) + defer cancel() + if err := srv.Shutdown(timeout); err == timeout.Err() { + srv.Close() + } return err }