Use the hiccup mechanism to notify the socket end of the pair of the change in state, and have it shutdown that end, and shutdown the local end normally. This seems to resolve the shutdown and race condition issues.

This commit is contained in:
Ian Barber 2012-06-08 23:55:42 +01:00
parent b84b007981
commit 67497a2643
2 changed files with 9 additions and 4 deletions

View File

@ -395,15 +395,15 @@ void zmq::session_base_t::detached ()
return;
}
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->hiccup ();
pipe->terminate (false);
pipe = NULL;
}
reset ();
// Reconnect.
if (options.reconnect_ivl != -1)

View File

@ -916,7 +916,7 @@ void zmq::socket_base_t::xwrite_activated (pipe_t *pipe_)
void zmq::socket_base_t::xhiccuped (pipe_t *pipe_)
{
zmq_assert (false);
zmq_assert ( options.delay_attach_on_connect == 1 );
}
void zmq::socket_base_t::in_event ()
@ -970,6 +970,11 @@ void zmq::socket_base_t::write_activated (pipe_t *pipe_)
void zmq::socket_base_t::hiccuped (pipe_t *pipe_)
{
if( options.delay_attach_on_connect == 1 ) {
pipe_->terminate (false);
}
// Notify derived sockets of the hiccup
xhiccuped (pipe_);
}