diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-01-23 11:50:08 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-01-23 13:16:38 +0000 |
| commit | a8c686c83f0882effcb668f562c7fc9e3a41a09a (patch) | |
| tree | 1a5cdc16fbba51a433be8dfb4587fa3121336e1d | |
| parent | 79910ad71b16dbf22e70717166c21361b5cf9bf0 (diff) | |
pkg/manager: accept context in the HTTP server
It enables stopping the server.
Also, replace some log.Fatalf calls by returning errors.
| -rw-r--r-- | pkg/manager/http.go | 22 | ||||
| -rw-r--r-- | syz-manager/manager.go | 7 |
2 files changed, 22 insertions, 7 deletions
diff --git a/pkg/manager/http.go b/pkg/manager/http.go index d78d5dc0e..e8c4728ad 100644 --- a/pkg/manager/http.go +++ b/pkg/manager/http.go @@ -5,6 +5,7 @@ package manager import ( "bytes" + "context" "embed" "encoding/json" "fmt" @@ -67,9 +68,9 @@ type HTTPServer struct { paused bool } -func (serv *HTTPServer) Serve() { +func (serv *HTTPServer) Serve(ctx context.Context) error { if serv.Cfg.HTTP == "" { - log.Fatalf("starting a disabled HTTP server") + return fmt.Errorf("starting a disabled HTTP server") } if serv.Pool != nil { serv.Pools = map[string]*vm.Dispatcher{"": serv.Pool} @@ -110,10 +111,19 @@ func (serv *HTTPServer) Serve() { handle("/favicon.ico", func(w http.ResponseWriter, r *http.Request) {}) log.Logf(0, "serving http on http://%v", serv.Cfg.HTTP) - err := http.ListenAndServe(serv.Cfg.HTTP, nil) - if err != nil { - log.Fatalf("failed to listen on %v: %v", serv.Cfg.HTTP, err) - } + server := &http.Server{Addr: serv.Cfg.HTTP} + go func() { + // The http server package unfortunately does not natively take a context.Context. + // Let's emulate it via server.Shutdown() + <-ctx.Done() + server.Close() + }() + + err := server.ListenAndServe() + if err != http.ErrServerClosed { + return err + } + return nil } func (serv *HTTPServer) httpAction(w http.ResponseWriter, r *http.Request) { diff --git a/syz-manager/manager.go b/syz-manager/manager.go index fd6be0072..1ea489dd9 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -357,7 +357,12 @@ func RunManager(mode *Mode, cfg *mgrconfig.Config) { ctx := vm.ShutdownCtx() if mgr.cfg.HTTP != "" { - go mgr.http.Serve() + go func() { + err := mgr.http.Serve(ctx) + if err != nil { + log.Fatalf("failed to serve HTTP: %v", err) + } + }() } go mgr.trackUsedFiles() go mgr.processFuzzingResults(ctx) |
