From 2602a776e520ff12769cac152559b0bf33d5f70f Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Fri, 27 Apr 2012 10:29:37 +0200 Subject: Truncate the message when it is sent to XSUB This patch is based on patch by Martin Hurton from 0MQ project. Signed-off-by: Martin Sustrik --- src/xsub.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/xsub.cpp b/src/xsub.cpp index 3afd734..7272a8e 100644 --- a/src/xsub.cpp +++ b/src/xsub.cpp @@ -117,24 +117,25 @@ int xs::xsub_t::xsend (msg_t *msg_, int flags_) ++it->second; if (it->second == 1) return dist.send_to_all (msg_, flags_); - else - return 0; } else if (cmd == XS_CMD_UNSUBSCRIBE) { subscriptions_t::iterator it = subscriptions.find ( std::make_pair (filter_id, blob_t (data + 4, size - 4))); - if (it == subscriptions.end ()) - return 0; - xs_assert (it->second); - --it->second; - if (it->second) - return 0; - subscriptions.erase (it); - return dist.send_to_all (msg_, flags_); + if (it != subscriptions.end ()) { + xs_assert (it->second); + --it->second; + if (!it->second) { + subscriptions.erase (it); + return dist.send_to_all (msg_, flags_); + } + } } - xs_assert (false); - return -1; + int rc = msg_->close (); + errno_assert (rc == 0); + rc = msg_->init (); + errno_assert (rc == 0); + return 0; } bool xs::xsub_t::xhas_out () -- cgit v1.2.3