Skip to content

Commit d103401

Browse files
authored
Merge pull request #211 from kurdybacha/add_throws
Problem: poller_t's deprecated add might throw std::bad_function_call
2 parents 85a9805 + c55379d commit d103401

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

tests/poller.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,4 +252,19 @@ TEST(poller, poller_remove_invalid_socket_throws)
252252
ASSERT_EQ (1u, poller.size ());
253253
}
254254

255+
TEST(poller, wait_on_added_empty_handler)
256+
{
257+
zmq::context_t context;
258+
zmq::socket_t vent{context, zmq::socket_type::push};
259+
auto endpoint = loopback_ip4_binder(vent).endpoint();
260+
261+
zmq::socket_t sink{context, zmq::socket_type::pull};
262+
ASSERT_NO_THROW(sink.connect(endpoint));
263+
ASSERT_NO_THROW(vent.send("Hi"));
264+
265+
zmq::poller_t poller;
266+
std::function<void(void)> handler;
267+
ASSERT_NO_THROW(poller.add(sink, ZMQ_POLLIN, handler));
268+
ASSERT_NO_THROW(poller.wait(std::chrono::milliseconds{-1}));
269+
}
255270
#endif

zmq.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,8 @@ namespace zmq
10531053
ZMQ_DEPRECATED("from 4.3.0, use overload accepting handler_t instead")
10541054
void add (zmq::socket_t &socket, short events, std::function<void(void)> &handler)
10551055
{
1056-
add (socket, events, [&handler](short) { handler(); });
1056+
add (socket, events, handler ? [&handler](short) { handler(); }
1057+
: handler_t{});
10571058
}
10581059

10591060
void add (zmq::socket_t &socket, short events, handler_t handler)

0 commit comments

Comments
 (0)