From 516b440e0d215cac59b771453ffeac0e5825b41d Mon Sep 17 00:00:00 2001 From: Charles Stanley Date: Fri, 9 Oct 2015 08:47:11 -0400 Subject: [PATCH] fixes #1315 socket monitor hangs if zmq_bind fails --- src/socket_base.cpp | 8 ++++---- src/socket_base.hpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/socket_base.cpp b/src/socket_base.cpp index ea178a8687..3dcae563d1 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -1497,12 +1497,12 @@ int zmq::socket_base_t::monitor (const char *addr_, int events_) int linger = 0; int rc = zmq_setsockopt (monitor_socket, ZMQ_LINGER, &linger, sizeof (linger)); if (rc == -1) - stop_monitor (); + stop_monitor (false); // Spawn the monitor socket endpoint rc = zmq_bind (monitor_socket, addr_); if (rc == -1) - stop_monitor (); + stop_monitor (false); return rc; } @@ -1598,10 +1598,10 @@ void zmq::socket_base_t::monitor_event (int event_, int value_, const std::strin } } -void zmq::socket_base_t::stop_monitor (void) +void zmq::socket_base_t::stop_monitor (bool send_monitor_stopped_event_) { if (monitor_socket) { - if (monitor_events & ZMQ_EVENT_MONITOR_STOPPED) + if ((monitor_events & ZMQ_EVENT_MONITOR_STOPPED) && send_monitor_stopped_event_) monitor_event (ZMQ_EVENT_MONITOR_STOPPED, 0, ""); zmq_close (monitor_socket); monitor_socket = NULL; diff --git a/src/socket_base.hpp b/src/socket_base.hpp index 8d82842443..4e0571ae8a 100644 --- a/src/socket_base.hpp +++ b/src/socket_base.hpp @@ -175,7 +175,7 @@ namespace zmq void monitor_event (int event_, int value_, const std::string& addr_); // Monitor socket cleanup - void stop_monitor (); + void stop_monitor (bool send_monitor_stopped_event_ = true); // Next assigned name on a zmq_connect() call used by ROUTER and STREAM socket types std::string connect_rid;