From 708298d798693a19ace9a4811a3760d8de0a5c1d Mon Sep 17 00:00:00 2001 From: Martin Hurton Date: Wed, 3 Mar 2010 00:08:11 +0100 Subject: Fix possible lockups when reading from ZMQ_REP sockets --- src/rep.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/rep.cpp b/src/rep.cpp index 755d78e..95ea0b1 100644 --- a/src/rep.cpp +++ b/src/rep.cpp @@ -71,13 +71,19 @@ void zmq::rep_t::xdetach_inpipe (class reader_t *pipe_) active--; in_pipes.swap (index, active); out_pipes.swap (index, active); + if (current == active) + current = 0; } return; } // Now both inpipe and outpipe are detached. Remove them from the lists. - if (index < active) + if (index < active) { active--; + if (current == active) + current = 0; + } + in_pipes.erase (index); out_pipes.erase (index); } @@ -103,13 +109,19 @@ void zmq::rep_t::xdetach_outpipe (class writer_t *pipe_) active--; in_pipes.swap (index, active); out_pipes.swap (index, active); + if (current == active) + current = 0; } return; } // Now both inpipe and outpipe are detached. Remove them from the lists. - if (out_pipes.index (pipe_) < active) + if (out_pipes.index (pipe_) < active) { active--; + if (current == active) + current = 0; + } + in_pipes.erase (index); out_pipes.erase (index); } -- cgit v1.2.3