aboutsummaryrefslogtreecommitdiff
path: root/pkg/worker/http.go
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-05-04 23:28:05 +0200
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-05-04 23:56:53 +0200
commitfadc75c731368d39edc718246b6dedff40e097e3 (patch)
tree103d9673d0c33c1fc18dfa0ee55e4ed618e3ce64 /pkg/worker/http.go
parent8a2461aa05895cc7828bc9619b50fa5dee5ed1f4 (diff)
downloadcerrado-fadc75c731368d39edc718246b6dedff40e097e3.tar.gz
cerrado-fadc75c731368d39edc718246b6dedff40e097e3.tar.bz2
cerrado-fadc75c731368d39edc718246b6dedff40e097e3.zip
feat: Close worker on error
If a worker error the application, as a whole, is terminadated.
Diffstat (limited to 'pkg/worker/http.go')
-rw-r--r--pkg/worker/http.go20
1 files changed, 16 insertions, 4 deletions
diff --git a/pkg/worker/http.go b/pkg/worker/http.go
index 1d56f86..973775e 100644
--- a/pkg/worker/http.go
+++ b/pkg/worker/http.go
@@ -16,11 +16,23 @@ func NewServerTask(server *http.Server) *ServerTask {
}
func (self *ServerTask) Start(ctx context.Context) error {
+ done := make(chan error)
+
go func() {
- // nolint: errcheck
- self.server.ListenAndServe()
+ done <- self.server.ListenAndServe()
}()
- <-ctx.Done()
- return self.server.Shutdown(ctx)
+ select {
+ // if ListenAndServe error for something other than context.Canceled
+ //(e.g.: address already in use) it trigger done to return sonner with
+ // the return error
+ case err := <-done:
+ return err
+
+ // in case of context canceled it will manually trigger the server to
+ // shutdown, and return its error, which is most cases, but not limited, is
+ // context.Canceled.
+ case <-ctx.Done():
+ return self.server.Shutdown(ctx)
+ }
}