Commit a73d5cd6 authored by Luca Boccassi's avatar Luca Boccassi

Problem: router pipe can block forever

Solution: invert check_write and check_hwm calls in router xsend
function so that check_write can mark the pipe as inactive if
necessary.
parent 1cfc3e17
......@@ -213,25 +213,18 @@ int zmq::router_t::xsend (msg_t *msg_)
if (it != outpipes.end ()) {
current_out = it->second.pipe;
// Check whether pipe is closed or not
if (!current_out->check_write()) {
// Check whether pipe is full or not
if (!current_out->check_hwm()) {
bool pipe_full = !current_out->check_hwm ();
it->second.active = false;
current_out = NULL;
if (mandatory) {
more_out = false;
if (pipe_full)
errno = EAGAIN;
return -1;
}
}
// Check whether pipe is closed or not
else
if (!current_out->check_write()) {
it->second.active = false;
current_out = NULL;
if (mandatory) {
more_out = false;
errno = EHOSTUNREACH;
return -1;
}
......
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