From 7253b2be6df6d0d36d370c641cdbc82b8abe41d8 Mon Sep 17 00:00:00 2001 From: Dom Date: Mon, 4 Jun 2018 13:44:31 +0100 Subject: [PATCH] MGO-156 Avoid iter.Next deadlock on dead sockets (#182) --- 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 }