From 26ca5ed8c62f8a88a32106a5c9e003712f4ca655 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Sat, 14 Nov 2009 18:57:04 +0100 Subject: Fixing concurrency issue in rep.cpp resulting in broken connections with multiple requesters under heavy load. --- src/rep.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/rep.cpp') diff --git a/src/rep.cpp b/src/rep.cpp index e8a9e39..7599cb5 100644 --- a/src/rep.cpp +++ b/src/rep.cpp @@ -178,14 +178,15 @@ int zmq::rep_t::xrecv (zmq_msg_t *msg_, int flags_) // Round-robin over the pipes to get next message. for (int count = active; count != 0; count--) { bool fetched = in_pipes [current]->read (msg_); - current++; - if (current >= active) - current = 0; if (fetched) { reply_pipe = out_pipes [current]; waiting_for_reply = true; - return 0; } + current++; + if (current >= active) + current = 0; + if (fetched) + return 0; } // No message is available. Initialise the output parameter -- cgit v1.2.3