Merge pull request #2354 from bluca/fix_pipe

Problem: router pipe can block forever
This commit is contained in:
Doron Somech 2017-02-25 06:13:18 +02:00 committed by GitHub
commit 07d904a2f8

View File

@ -213,26 +213,19 @@ int zmq::router_t::xsend (msg_t *msg_)
if (it != outpipes.end ()) {
current_out = it->second.pipe;
// Check whether pipe is full or not
if (!current_out->check_hwm()) {
it->second.active = false;
current_out = NULL;
if (mandatory) {
more_out = false;
errno = EAGAIN;
return -1;
}
}
// Check whether pipe is closed or not
else
if (!current_out->check_write()) {
// Check whether pipe is full or not
bool pipe_full = !current_out->check_hwm ();
it->second.active = false;
current_out = NULL;
if (mandatory) {
more_out = false;
errno = EHOSTUNREACH;
if (pipe_full)
errno = EAGAIN;
else
errno = EHOSTUNREACH;
return -1;
}
}