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_);