Fixing concurrency issue in rep.cpp resulting in broken connections with multiple requesters under heavy load.

This commit is contained in:
Martin Sustrik 2009-11-14 18:57:04 +01:00
parent 84585a9561
commit 26ca5ed8c6

View File

@ -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