mirror of
https://github.com/zeromq/libzmq.git
synced 2025-10-17 19:25:55 +02:00
The previous code to block the socket from receiving on that pipe during a disconnect was vulnerable to a race condition. This code calls with the terminate functions of both ends of the pipe - I believe this should be safer. This required storing a pointer to the socket end of the pipe
This commit is contained in:
@@ -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.
|
||||
@@ -411,8 +414,7 @@ void zmq::session_base_t::detached ()
|
||||
if (pipe && options.delay_attach_on_connect == 1
|
||||
&& addr->protocol != "pgm" && addr->protocol != "epgm") {
|
||||
pipe->terminate (false);
|
||||
socket->terminated (pipe);
|
||||
pipe = NULL;
|
||||
outpipe->terminate (false);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user