summaryrefslogtreecommitdiff
path: root/src/dist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dist.cpp')
-rw-r--r--src/dist.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/dist.cpp b/src/dist.cpp
index 79baf43..795e13e 100644
--- a/src/dist.cpp
+++ b/src/dist.cpp
@@ -142,10 +142,12 @@ void zmq::dist_t::distribute (msg_t *msg_, int flags_)
msg_->add_refs ((int) matching - 1);
// Push copy of the message to each matching pipe.
- for (pipes_t::size_type i = 0; i < matching; ++i) {
+ int failed = 0;
+ for (pipes_t::size_type i = 0; i < matching; ++i)
if (!write (pipes [i], msg_))
- msg_->rm_refs (1);
- }
+ ++failed;
+ if (unlikely (failed))
+ msg_->rm_refs (failed);
// Detach the original message from the data buffer. Note that we don't
// close the message. That's because we've already used all the references.