mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-04 07:27:26 +01:00
Merge pull request #1891 from paddor/master
Fix return value of zmq_poller_wait when used on empty poller
This commit is contained in:
commit
c54589daef
@ -393,16 +393,22 @@ int zmq::socket_poller_t::wait (zmq::socket_poller_t::event_t *event_, long time
|
||||
|
||||
#if defined ZMQ_POLL_BASED_ON_POLL
|
||||
if (unlikely (poll_size == 0)) {
|
||||
// We'll report an error (timed out) as if the list was non-empty and
|
||||
// no event occured within the specified timeout. Otherwise the caller
|
||||
// needs to check the return value AND the event to avoid using the
|
||||
// nullified event data.
|
||||
errno = ETIMEDOUT;
|
||||
if (timeout_ == 0)
|
||||
return 0;
|
||||
return -1;
|
||||
#if defined ZMQ_HAVE_WINDOWS
|
||||
Sleep (timeout_ > 0 ? timeout_ : INFINITE);
|
||||
return 0;
|
||||
return -1;
|
||||
#elif defined ZMQ_HAVE_ANDROID
|
||||
usleep (timeout_ * 1000);
|
||||
return 0;
|
||||
return -1;
|
||||
#else
|
||||
return usleep (timeout_ * 1000);
|
||||
usleep (timeout_ * 1000);
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1209,6 +1209,8 @@ int zmq_poller_wait (void *poller_, zmq_poller_event_t *event, long timeout_)
|
||||
return -1;
|
||||
}
|
||||
|
||||
zmq_assert (event != NULL);
|
||||
|
||||
zmq::socket_poller_t::event_t e;
|
||||
memset (&e, 0, sizeof (e));
|
||||
|
||||
|
@ -60,6 +60,14 @@ int main (void)
|
||||
|
||||
// Set up poller
|
||||
void* poller = zmq_poller_new ();
|
||||
zmq_poller_event_t event;
|
||||
|
||||
// waiting on poller with no registered sockets should report error
|
||||
rc = zmq_poller_wait(poller, &event, 0);
|
||||
assert (rc == -1);
|
||||
assert (errno == ETIMEDOUT);
|
||||
|
||||
// register sink
|
||||
rc = zmq_poller_add (poller, sink, sink, ZMQ_POLLIN);
|
||||
assert (rc == 0);
|
||||
|
||||
@ -69,7 +77,6 @@ int main (void)
|
||||
assert (rc == 1);
|
||||
|
||||
// We expect a message only on the sink
|
||||
zmq_poller_event_t event;
|
||||
rc = zmq_poller_wait (poller, &event, -1);
|
||||
assert (rc == 0);
|
||||
assert (event.socket == sink);
|
||||
|
Loading…
x
Reference in New Issue
Block a user