diff --git a/src/dispatcher.cpp b/src/dispatcher.cpp index 530238dd..6ac9fa24 100644 --- a/src/dispatcher.cpp +++ b/src/dispatcher.cpp @@ -100,8 +100,8 @@ zmq::dispatcher_t::~dispatcher_t () delete io_threads [i]; // Deallocate all the orphaned pipes. - for (pipes_t::iterator it = pipes.begin (); it != pipes.end (); it++) - delete *it; + while (!pipes.empty ()) + delete *pipes.begin (); delete [] command_pipes; diff --git a/src/session.cpp b/src/session.cpp index 9593827f..d4554620 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -55,6 +55,9 @@ bool zmq::session_t::read (::zmq_msg_t *msg_) bool zmq::session_t::write (::zmq_msg_t *msg_) { + if (!out_pipe) + return true; + if (out_pipe->write (msg_)) { zmq_msg_init (msg_); return true; @@ -65,7 +68,8 @@ bool zmq::session_t::write (::zmq_msg_t *msg_) void zmq::session_t::flush () { - out_pipe->flush (); + if (out_pipe) + out_pipe->flush (); } void zmq::session_t::detach () diff --git a/src/zmq_connecter_init.cpp b/src/zmq_connecter_init.cpp index ffd4a647..f0cbf90c 100644 --- a/src/zmq_connecter_init.cpp +++ b/src/zmq_connecter_init.cpp @@ -60,9 +60,13 @@ bool zmq::zmq_connecter_init_t::read (::zmq_msg_t *msg_) if (!session_name.empty ()) session = owner->find_session (session_name.c_str ()); if (!session) { - // TODO + + // TODO: + // The socket is already closing. The session is already shut down, + // so no point in continuing with connecting. Shut the connection down. zmq_assert (false); } + send_attach (session, engine); engine = NULL;