From 54799c8c6fa605f7272e966912f6e93161f9d11d Mon Sep 17 00:00:00 2001 From: Charles Stanley Date: Mon, 30 Nov 2015 10:05:25 -0500 Subject: [PATCH] fixes #1565: Allow session to flush commands on an engine error --- src/session_base.cpp | 3 +++ src/socket_base.cpp | 7 +++++++ src/socket_base.hpp | 2 ++ 3 files changed, 12 insertions(+) diff --git a/src/session_base.cpp b/src/session_base.cpp index 3c1b9107..39b0b5c6 100644 --- a/src/session_base.cpp +++ b/src/session_base.cpp @@ -428,6 +428,9 @@ void zmq::session_base_t::engine_error ( if (zap_pipe) zap_pipe->check_read (); + + zmq_assert(socket); + socket->flush_commands(); } void zmq::session_base_t::process_term (int linger_) diff --git a/src/socket_base.cpp b/src/socket_base.cpp index 3dcae563..ef4bfeab 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -1417,6 +1417,13 @@ void zmq::socket_base_t::check_destroy () } } +void zmq::socket_base_t::flush_commands () +{ + ENTER_MUTEX(); + process_commands (0, false); + EXIT_MUTEX(); +} + void zmq::socket_base_t::read_activated (pipe_t *pipe_) { xread_activated (pipe_); diff --git a/src/socket_base.hpp b/src/socket_base.hpp index 4e0571ae..a58cf2d3 100644 --- a/src/socket_base.hpp +++ b/src/socket_base.hpp @@ -109,6 +109,8 @@ namespace zmq void out_event (); void timer_event (int id_); + void flush_commands(); + // i_pipe_events interface implementation. void read_activated (pipe_t *pipe_); void write_activated (pipe_t *pipe_);