From ad0b055245d6ed85b097f0d41bd496ca34952bff Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Wed, 30 Oct 2019 10:57:40 +0100 Subject: [PATCH] daemon/prometheus: fix crash if listener cannot be created refs #238 zrepl version=v0.2.0-11-gdc39c81 GOOS=linux GOARCH=amd64 Compiler=gc starting daemon [pull_source]: starting job [_prometheus]: starting job [connection_loss_tidyup]: starting job [connection_loss_tidyup]: wait for wakeups [_control]: starting job [_prometheus]: cannot listen err="listen tcp 10.0.0.200:9091: bind: cannot assign requested add [_prometheus]: job exited panic: runtime error: invalid memory address or nil pointer dereference panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x81ea4d] goroutine 25 [running]: net/http.(*onceCloseListener).close(...) /usr/local/go/src/net/http/server.go:3330 sync.(*Once).doSlow(0xc00018b060, 0xc0000c7bc0) /usr/local/go/src/sync/once.go:66 +0xe3 sync.(*Once).Do(...) /usr/local/go/src/sync/once.go:57 net/http.(*onceCloseListener).Close(0xc00018b050, 0xc0003a6000, 0xe0) /usr/local/go/src/net/http/server.go:3326 +0x77 panic(0xb1d1c0, 0x11d7d90) /usr/local/go/src/runtime/panic.go:679 +0x1b2 net/http.(*onceCloseListener).Accept(0xc00018b050, 0xc000120020, 0xb0fd20, 0x11d7ce0, 0xbee6e0) :1 +0x32 net/http.(*Server).Serve(0xc0003a6000, 0x0, 0x0, 0x0, 0x0) /usr/local/go/src/net/http/server.go:2896 +0x286 net/http.Serve(...) /usr/local/go/src/net/http/server.go:2468 github.com/zrepl/zrepl/daemon.(*prometheusJob).Run(0xc000109940, 0xd19ec0, 0xc00018a930) /go/src/github.com/zrepl/zrepl/daemon/prometheus.go:75 +0x23e github.com/zrepl/zrepl/daemon.(*jobs).start.func1(0xc0000f68c0, 0xd22c40, 0xc000116ee0, 0xd1ba4 /go/src/github.com/zrepl/zrepl/daemon/daemon.go:220 +0x121 created by github.com/zrepl/zrepl/daemon.(*jobs).start /go/src/github.com/zrepl/zrepl/daemon/daemon.go:216 +0x52e zrepl.service: Main process exited, code=exited, status=2/INVALIDARGUMENT zrepl.service: Failed with result 'exit-code'. --- daemon/prometheus.go | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon/prometheus.go b/daemon/prometheus.go index 3d805ed..685a3c6 100644 --- a/daemon/prometheus.go +++ b/daemon/prometheus.go @@ -63,6 +63,7 @@ func (j *prometheusJob) Run(ctx context.Context) { l, err := net.Listen("tcp", j.listen) if err != nil { log.WithError(err).Error("cannot listen") + return } go func() { <-ctx.Done()