Skip to content

Commit 52c606e

Browse files
authored
Merge pull request #190 from sigiesec/fix-poller-api-error-handling
Fix copy/move constructors of poller_t, and make error handling consistent with rest of API
2 parents 84ab7a0 + 6086132 commit 52c606e

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

zmq.hpp

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -990,25 +990,45 @@ namespace zmq
990990

991991
~poller_t ()
992992
{
993-
zmq_poller_destroy (&poller_ptr);
993+
if (poller_ptr)
994+
{
995+
int rc = zmq_poller_destroy (&poller_ptr);
996+
assert(rc == 0);
997+
}
998+
}
999+
1000+
poller_t(const poller_t&) = delete;
1001+
poller_t &operator=(const poller_t&) = delete;
1002+
poller_t(poller_t&& src)
1003+
: poller_ptr(src.poller_ptr)
1004+
, poller_events(std::move (src.poller_events))
1005+
{
1006+
src.poller_ptr = NULL;
9941007
}
1008+
poller_t &operator=(poller_t&& src)
1009+
{
1010+
poller_ptr = src.poller_ptr;
1011+
poller_events = std::move (src.poller_events);
1012+
src.poller_ptr = NULL;
1013+
return *this;
1014+
}
9951015

996-
bool add (zmq::socket_t &socket, short events, std::function<void(void)> &handler)
1016+
void add (zmq::socket_t &socket, short events, std::function<void(void)> &handler)
9971017
{
9981018
if (0 == zmq_poller_add (poller_ptr, socket.ptr, handler ? &handler : NULL, events)) {
9991019
poller_events.emplace_back (zmq_poller_event_t ());
1000-
return true;
1020+
return;
10011021
}
1002-
return false;
1022+
throw error_t ();
10031023
}
10041024

1005-
bool remove (zmq::socket_t &socket)
1025+
void remove (zmq::socket_t &socket)
10061026
{
10071027
if (0 == zmq_poller_remove (poller_ptr, socket.ptr)) {
10081028
poller_events.pop_back ();
1009-
return true;
1029+
return;
10101030
}
1011-
return false;
1031+
throw error_t ();
10121032
}
10131033

10141034
bool wait (std::chrono::milliseconds timeout)

0 commit comments

Comments
 (0)