summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2012-04-05 05:46:32 +0200
committerMartin Sustrik <sustrik@250bpm.com>2012-04-06 12:41:08 +0200
commit8c9595effe514068c8f051b06636ab6b5cf7e67a (patch)
tree4eda8360cbf2d929bcadff911250bd0bcfd5bd2b /src
parent91267446ef621adfa35c9f90df7754ecf5299e4d (diff)
Allow pipe_t::flush() to be called from pipe_t::terminate()
Previous patch have broken flushing a delimiter in pipe_t::terminate() function. This patch allows the flush to happen even if pipe state is set to 'terminated'. Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src')
-rw-r--r--src/pipe.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/pipe.cpp b/src/pipe.cpp
index 77893d2..0a15cc0 100644
--- a/src/pipe.cpp
+++ b/src/pipe.cpp
@@ -346,9 +346,9 @@ void xs::pipe_t::terminate (bool delay_)
// There are still pending messages available, but the user calls
// 'terminate'. We can act as if all the pending messages were read.
else if (state == pending && !delay) {
- outpipe = NULL;
- send_pipe_term_ack (peer);
- state = terminating;
+ outpipe = NULL;
+ send_pipe_term_ack (peer);
+ state = terminating;
}
// If there are pending messages still availabe, do nothing.
@@ -381,7 +381,8 @@ void xs::pipe_t::terminate (bool delay_)
msg_t msg;
msg.init_delimiter ();
outpipe->write (msg, false);
- flush ();
+ if (state != terminating && !outpipe->flush ())
+ send_activate_read (peer);
}
}