diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2010-05-31 06:11:20 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2010-05-31 06:11:20 +0200 |
commit | 04fcd4d55b3b01e75d1d0d547987841811a2d610 (patch) | |
tree | a2814a0021aa772ec8cd3311ce356d61b1c0f9d3 | |
parent | 8408ae066dce123fc93e4f53dbadb1f60b7f2e8a (diff) |
memory leak in REP socket fixed
-rw-r--r-- | src/rep.cpp | 34 |
1 files changed, 4 insertions, 30 deletions
diff --git a/src/rep.cpp b/src/rep.cpp index 6711509..34b77c4 100644 --- a/src/rep.cpp +++ b/src/rep.cpp @@ -66,27 +66,14 @@ void zmq::rep_t::xdetach_inpipe (class reader_t *pipe_) in_pipes_t::size_type index = in_pipes.index (pipe_); - // If corresponding outpipe is still in place simply nullify the pointer - // to the inpipe and move it to the passive state. - if (out_pipes [index]) { - in_pipes [index] = NULL; - if (in_pipes.index (pipe_) < active) { - active--; - in_pipes.swap (index, active); - out_pipes.swap (index, active); - if (current == active) - current = 0; - } - return; - } - - // Now both inpipe and outpipe are detached. Remove them from the lists. if (index < active) { active--; if (current == active) current = 0; } + if (out_pipes [index]) + out_pipes [index]->term (); in_pipes.erase (index); out_pipes.erase (index); } @@ -104,27 +91,14 @@ void zmq::rep_t::xdetach_outpipe (class writer_t *pipe_) if (sending_reply && pipe_ == reply_pipe) reply_pipe = NULL; - // If corresponding inpipe is still in place simply nullify the pointer - // to the outpipe. - if (in_pipes [index]) { - out_pipes [index] = NULL; - if (out_pipes.index (pipe_) < active) { - active--; - in_pipes.swap (index, active); - out_pipes.swap (index, active); - if (current == active) - current = 0; - } - return; - } - - // Now both inpipe and outpipe are detached. Remove them from the lists. if (out_pipes.index (pipe_) < active) { active--; if (current == active) current = 0; } + if (in_pipes [index]) + in_pipes [index]->term (); in_pipes.erase (index); out_pipes.erase (index); } |