diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2010-10-10 09:23:37 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2010-10-10 09:23:37 +0200 |
commit | 73e7ef37c2e72dd542d20ddc5be30cedce68e329 (patch) | |
tree | 612db0bc49fb8ca1f4c0e7b8f50108a5b8d2ae98 | |
parent | f5030a93a52fc73292c16dae5f8e0e1b39732df0 (diff) |
When XREP silently drops message, it does not empty it -- fixed
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
-rw-r--r-- | src/xrep.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/xrep.cpp b/src/xrep.cpp index 9cbd9cb..2d538db 100644 --- a/src/xrep.cpp +++ b/src/xrep.cpp @@ -173,23 +173,24 @@ int zmq::xrep_t::xsend (zmq_msg_t *msg_, int flags_) zmq_assert (!current_out); // If we have malformed message (prefix with no subsequent message) - // then just silently drop the message. - if ((msg_->flags & ZMQ_MSG_MORE) == 0) - return 0; - - more_out = true; + // then just silently ignore it. + if (msg_->flags & ZMQ_MSG_MORE) { - // Find the pipe associated with the identity stored in the prefix. - // If there's no such pipe just silently drop the message. - blob_t identity ((unsigned char*) zmq_msg_data (msg_), - zmq_msg_size (msg_)); - outpipes_t::iterator it = outpipes.find (identity); - if (it == outpipes.end ()) - return 0; + more_out = true; - // Remember the outgoing pipe. - current_out = it->second.writer; + // Find the pipe associated with the identity stored in the prefix. + // If there's no such pipe just silently ignore the message. + blob_t identity ((unsigned char*) zmq_msg_data (msg_), + zmq_msg_size (msg_)); + outpipes_t::iterator it = outpipes.find (identity); + if (it != outpipes.end ()) + current_out = it->second.writer; + } + int rc = zmq_msg_close (msg_); + zmq_assert (rc == 0); + rc = zmq_msg_init (msg_); + zmq_assert (rc == 0); return 0; } |