Recover from ocasional panic caused by zmq during shutdown

This commit is contained in:
Martin Boehm 2018-05-01 22:56:50 +02:00
parent 7de8726979
commit 3f4af20951

View File

@ -62,13 +62,19 @@ func NewMQ(binding string, callback func(NotificationType)) (*MQ, error) {
} }
func (mq *MQ) run(callback func(NotificationType)) { 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 mq.isRunning = true
for { for {
msg, err := mq.socket.RecvMessageBytes(0) msg, err := mq.socket.RecvMessageBytes(0)
if err != nil { if err != nil {
if zmq.AsErrno(err) == zmq.Errno(zmq.ETERM) || err.Error() == "Socket is closed" { if zmq.AsErrno(err) == zmq.Errno(zmq.ETERM) || err.Error() == "Socket is closed" {
close(mq.finished)
glog.Info("MQ loop terminated")
break break
} }
glog.Error("MQ RecvMessageBytes error ", err, ", ", zmq.AsErrno(err)) glog.Error("MQ RecvMessageBytes error ", err, ", ", zmq.AsErrno(err))
@ -96,7 +102,6 @@ func (mq *MQ) run(callback func(NotificationType)) {
callback(nt) callback(nt)
} }
} }
mq.isRunning = false
} }
// Shutdown stops listening to the ZeroMQ and closes the connection // Shutdown stops listening to the ZeroMQ and closes the connection