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 }