Commit d4cc5923 authored by Simon Giesecke's avatar Simon Giesecke

Problem: loop variable modified in loop step and body

Solution: modify it in loop body only
parent a64c3e6c
...@@ -171,9 +171,13 @@ void zmq::dist_t::distribute (msg_t *msg_) ...@@ -171,9 +171,13 @@ void zmq::dist_t::distribute (msg_t *msg_)
} }
if (msg_->is_vsm ()) { if (msg_->is_vsm ()) {
for (pipes_t::size_type i = 0; i < _matching; ++i) for (pipes_t::size_type i = 0; i < _matching;) {
if (!write (_pipes[i], msg_)) if (!write (_pipes[i], msg_)) {
--i; // Retry last write because index will have been swapped // Use same index again because entry will have been removed.
} else {
++i;
}
}
int rc = msg_->close (); int rc = msg_->close ();
errno_assert (rc == 0); errno_assert (rc == 0);
rc = msg_->init (); rc = msg_->init ();
...@@ -187,11 +191,14 @@ void zmq::dist_t::distribute (msg_t *msg_) ...@@ -187,11 +191,14 @@ void zmq::dist_t::distribute (msg_t *msg_)
// Push copy of the message to each matching pipe. // Push copy of the message to each matching pipe.
int failed = 0; int failed = 0;
for (pipes_t::size_type i = 0; i < _matching; ++i) for (pipes_t::size_type i = 0; i < _matching;) {
if (!write (_pipes[i], msg_)) { if (!write (_pipes[i], msg_)) {
++failed; ++failed;
--i; // Retry last write because index will have been swapped // Use same index again because entry will have been removed.
} else {
++i;
} }
}
if (unlikely (failed)) if (unlikely (failed))
msg_->rm_refs (failed); msg_->rm_refs (failed);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment