diff --git a/src/socket_base.cpp b/src/socket_base.cpp index ba382c74..7fe40089 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -480,7 +480,6 @@ int zmq::socket_base_t::connect (const char *addr_) // 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[1])); return 0; } @@ -1012,6 +1011,14 @@ void zmq::socket_base_t::terminated (pipe_t *pipe_) // Notify the specific socket type about the pipe termination. 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); + break; + } + } + // Remove the pipe from the list of attached pipes and confirm its // termination if we are already shutting down. pipes.erase (pipe_);