Recover from ocasional panic caused by zmq during shutdown
This commit is contained in:
parent
7de8726979
commit
3f4af20951
11
bchain/mq.go
11
bchain/mq.go
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user