summaryrefslogtreecommitdiff
path: root/src/rep.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2010-05-31 06:11:20 +0200
committerMartin Sustrik <sustrik@250bpm.com>2010-05-31 06:11:20 +0200
commit04fcd4d55b3b01e75d1d0d547987841811a2d610 (patch)
treea2814a0021aa772ec8cd3311ce356d61b1c0f9d3 /src/rep.cpp
parent8408ae066dce123fc93e4f53dbadb1f60b7f2e8a (diff)
memory leak in REP socket fixed
Diffstat (limited to 'src/rep.cpp')
-rw-r--r--src/rep.cpp34
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);
}