Revert "Reverted to a simpler shutdown. This seems to disconnect and reconnect the pipe properly, but there is a problem in overall shutdown when the pipe has blocked and reconnected - the session seems to get terminated() called on it only in shutdown for the original pipe, by which point it has been replaced. I am not sure at the moment why this only happens then, but this does mean this patch is broken at the moment"

This reverts commit b84b007981.
This commit is contained in:
Ian Barber
2012-06-12 14:46:38 +01:00
parent 3ae68d67a4
commit 2c6f26153e
2 changed files with 15 additions and 9 deletions

View File

@@ -308,6 +308,9 @@ void zmq::session_base_t::process_attach (i_engine *engine_)
// Ask socket to plug into the remote end of the pipe.
send_bind (socket, pipes [1]);
// Store the outpipe for disconnect situations
outpipe = pipes [1];
}
// Plug in the engine.
@@ -396,15 +399,7 @@ void zmq::session_base_t::detached ()
}
reset ();
// For delayed connect situations, terminate the pipe
// and reestablish later on
if (pipe && options.delay_attach_on_connect == 1
&& addr->protocol != "pgm" && addr->protocol != "epgm") {
pipe->terminate (false);
pipe = NULL;
}
// Reconnect.
if (options.reconnect_ivl != -1)
start_connecting (true);
@@ -413,6 +408,14 @@ void zmq::session_base_t::detached ()
// the socket object to resend all the subscriptions.
if (pipe && (options.type == ZMQ_SUB || options.type == ZMQ_XSUB))
pipe->hiccup ();
// For delayed connect situations, terminate the pipe
// and reestablish later on
if (pipe && options.delay_attach_on_connect == 1
&& addr->protocol != "pgm" && addr->protocol != "epgm") {
pipe->terminate (false);
outpipe->terminate (false);
}
}
void zmq::session_base_t::start_connecting (bool wait_)