summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2009-09-16 14:02:43 +0200
committerMartin Sustrik <sustrik@fastmq.commkdir>2009-09-16 14:02:43 +0200
commit4631fde7e385ea31e85f41290614afb9bda391c9 (patch)
tree4e936e8835d461eebc23ed9673ef874837492173
parent9c522dccaf0b2c8074bd96fbfb4c968f45748ba4 (diff)
ZMQII-8: Failure during orphan pipe deallocation
-rw-r--r--src/dispatcher.cpp4
-rw-r--r--src/session.cpp6
-rw-r--r--src/zmq_connecter_init.cpp6
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;