Minor optimisation in message distribution algorithm

If several of the outbound pipes become passive while sending
a single message, the refcount on the message is adjusted
once only, not multiple times. It's an atomic operation so
the cost is not negligible.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
Martin Sustrik 2011-09-14 15:16:48 +02:00
parent cf499ee016
commit 78b02d142e

View File

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