From af543a58f28363dc6f358c7431c5d27d07514961 Mon Sep 17 00:00:00 2001 From: somdoron Date: Wed, 18 Nov 2015 15:02:19 +0200 Subject: [PATCH 1/4] Fix a bug when stream_engine try to set alreadt set metadata --- src/stream_engine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stream_engine.cpp b/src/stream_engine.cpp index 87186cc0..faca8929 100644 --- a/src/stream_engine.cpp +++ b/src/stream_engine.cpp @@ -842,7 +842,7 @@ int zmq::stream_engine_t::push_msg_to_session (msg_t *msg_) } int zmq::stream_engine_t::push_raw_msg_to_session (msg_t *msg_) { - if (metadata) + if (metadata && metadata != msg_->metadata()) msg_->set_metadata(metadata); return push_msg_to_session(msg_); } From 7cfa9f647bcb1ba5e667484893ed63602f08a8ff Mon Sep 17 00:00:00 2001 From: Pieter Hintjens Date: Thu, 19 Nov 2015 14:03:21 +0200 Subject: [PATCH 2/4] Backported fix for #1644 --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 5428a80f..2781f326 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ * Fixed #1632 - build failure using latest libsodium. +* Fixed #1644 - assertion failure in msg.cpp:390 on STREAM sockets. + 0MQ version 4.1.3 stable, released on 2015/08/17 ================================================ From 5ee936a9bebb66d1f7e9ec8788a425e2ccc05028 Mon Sep 17 00:00:00 2001 From: Sergey Kovalevich Date: Fri, 20 Nov 2015 13:15:11 +0300 Subject: [PATCH 3/4] backport https://github.com/zeromq/libzmq/pull/1604 --- 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 6263d83b..d6d5d4e3 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -1234,12 +1234,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; } @@ -1332,10 +1332,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 171b5b8b..d5db9ea0 100644 --- a/src/socket_base.hpp +++ b/src/socket_base.hpp @@ -173,7 +173,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; From 7d749ad66a6d8ba77feada960c4eed4ba30f9e5e Mon Sep 17 00:00:00 2001 From: Pieter Hintjens Date: Fri, 20 Nov 2015 13:53:14 +0200 Subject: [PATCH 4/4] Updated NEWS for #1315 --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 2781f326..836aa2fc 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,8 @@ 0MQ version 4.1.4 stable, released on 2015/xx/xx ================================================ +* Fixed #1315 - socket monitor hangs if bind/setsockopt failed. + * Fixed #1399 - assertion failure in tcp.cpp after network reconnect. * Fixed #1632 - build failure using latest libsodium.