Removal of terminated pipes from inproc and ignoring peer ends

This commit is contained in:
Stefan Radomski 2012-12-04 17:03:58 +01:00
parent 8e6fdc56e1
commit 1965e2d05d

View File

@ -480,7 +480,6 @@ int zmq::socket_base_t::connect (const char *addr_)
// remember inproc connections for disconnect // remember inproc connections for disconnect
inprocs.insert (inprocs_t::value_type (std::string (addr_), pipes[0])); inprocs.insert (inprocs_t::value_type (std::string (addr_), pipes[0]));
inprocs.insert (inprocs_t::value_type (std::string (addr_), pipes[1]));
return 0; return 0;
} }
@ -1012,6 +1011,15 @@ void zmq::socket_base_t::terminated (pipe_t *pipe_)
// Notify the specific socket type about the pipe termination. // Notify the specific socket type about the pipe termination.
xterminated (pipe_); xterminated (pipe_);
// Remove pipe from inproc pipes
for (inprocs_t::iterator it = inprocs.begin(); it != inprocs.end(); ++it) {
if (it->second == pipe_) {
inprocs.erase(it++);
} else {
it++;
}
}
// Remove the pipe from the list of attached pipes and confirm its // Remove the pipe from the list of attached pipes and confirm its
// termination if we are already shutting down. // termination if we are already shutting down.
pipes.erase (pipe_); pipes.erase (pipe_);