mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-13 10:52:56 +01:00
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:
parent
b84b007981
commit
67497a2643
@ -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)
|
||||
|
@ -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_);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user