From 3f4af2095146b38b0bb723da7d44a25f602cb3b3 Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Tue, 1 May 2018 22:56:50 +0200 Subject: [PATCH] Recover from ocasional panic caused by zmq during shutdown --- bchain/mq.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/bchain/mq.go b/bchain/mq.go index d53d9994..299fcc19 100644 --- a/bchain/mq.go +++ b/bchain/mq.go @@ -62,13 +62,19 @@ func NewMQ(binding string, callback func(NotificationType)) (*MQ, error) { } func (mq *MQ) run(callback func(NotificationType)) { + defer func() { + if r := recover(); r != nil { + glog.Error("MQ loop recovered from ", r) + } + mq.isRunning = false + close(mq.finished) + glog.Info("MQ loop terminated") + }() mq.isRunning = true for { msg, err := mq.socket.RecvMessageBytes(0) if err != nil { if zmq.AsErrno(err) == zmq.Errno(zmq.ETERM) || err.Error() == "Socket is closed" { - close(mq.finished) - glog.Info("MQ loop terminated") break } glog.Error("MQ RecvMessageBytes error ", err, ", ", zmq.AsErrno(err)) @@ -96,7 +102,6 @@ func (mq *MQ) run(callback func(NotificationType)) { callback(nt) } } - mq.isRunning = false } // Shutdown stops listening to the ZeroMQ and closes the connection