diff options
author | Martin Sustrik <sustrik@fastmq.commkdir> | 2009-09-16 14:02:43 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@fastmq.commkdir> | 2009-09-16 14:02:43 +0200 |
commit | 4631fde7e385ea31e85f41290614afb9bda391c9 (patch) | |
tree | 4e936e8835d461eebc23ed9673ef874837492173 /src | |
parent | 9c522dccaf0b2c8074bd96fbfb4c968f45748ba4 (diff) |
ZMQII-8: Failure during orphan pipe deallocation
Diffstat (limited to 'src')
-rw-r--r-- | src/dispatcher.cpp | 4 | ||||
-rw-r--r-- | src/session.cpp | 6 | ||||
-rw-r--r-- | src/zmq_connecter_init.cpp | 6 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/dispatcher.cpp b/src/dispatcher.cpp index 530238d..6ac9fa2 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 9593827..d455462 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 ffd4a64..f0cbf90 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; |