From 3149e123a9f0bed2e63eab0c32904e1f13e381ea Mon Sep 17 00:00:00 2001 From: David Golden Date: Thu, 31 May 2018 20:58:26 -0400 Subject: [PATCH] MGO-156 Avoid iter.Next deadlock on dead sockets --- session.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/session.go b/session.go index c951e8e72..9defdab30 100644 --- a/session.go +++ b/session.go @@ -4536,7 +4536,13 @@ func (iter *Iter) getMore() { } else { op = &iter.op } - if err := socket.Query(op); err != nil { + // We unlock the iterator around socket.Query because it will call the + // replyFunc if the socket is dead, which would deadlock if the iterator + // were still locked. + iter.m.Unlock() + err = socket.Query(op) + iter.m.Lock() + if err != nil { iter.docsToReceive-- iter.err = err }