diff options
| author | Martin Sustrik <sustrik@250bpm.com> | 2010-08-11 14:09:56 +0200 | 
|---|---|---|
| committer | Martin Sustrik <sustrik@250bpm.com> | 2010-08-25 15:39:20 +0200 | 
| commit | d13933bc62fce71b5a58118020e0dd3776e79aa9 (patch) | |
| tree | 6586d5b9cc637dbf8acae4b32d24da9c8e046014 /src/pair.cpp | |
| parent | ee1f1af0091d9bdffa0e5ce1783da925b3cd7e56 (diff) | |
I/O object hierarchy implemented
Diffstat (limited to 'src/pair.cpp')
| -rw-r--r-- | src/pair.cpp | 28 | 
1 files changed, 18 insertions, 10 deletions
diff --git a/src/pair.cpp b/src/pair.cpp index 1ff2e1a..8db2ffc 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -28,7 +28,8 @@ zmq::pair_t::pair_t (class ctx_t *parent_, uint32_t slot_) :      inpipe (NULL),      outpipe (NULL),      inpipe_alive (false), -    outpipe_alive (false) +    outpipe_alive (false), +    terminating (false)  {      options.requires_in = true;      options.requires_out = true; @@ -43,6 +44,7 @@ zmq::pair_t::~pair_t ()  void zmq::pair_t::xattach_pipes (class reader_t *inpipe_,      class writer_t *outpipe_, const blob_t &peer_identity_)  { +    zmq_assert (!terminating);      zmq_assert (!inpipe && !outpipe);      inpipe = inpipe_; @@ -59,6 +61,9 @@ void zmq::pair_t::terminated (class reader_t *pipe_)      zmq_assert (pipe_ == inpipe);      inpipe = NULL;      inpipe_alive = false; + +    if (terminating) +        unregister_term_ack ();  }  void zmq::pair_t::terminated (class writer_t *pipe_) @@ -66,19 +71,22 @@ void zmq::pair_t::terminated (class writer_t *pipe_)      zmq_assert (pipe_ == outpipe);      outpipe = NULL;      outpipe_alive = false; -} -void zmq::pair_t::xterm_pipes () -{ -    if (inpipe) -        inpipe->terminate (); -    if (outpipe) -        outpipe->terminate (); +    if (terminating) +        unregister_term_ack ();  } -bool zmq::pair_t::xhas_pipes () +void zmq::pair_t::process_term ()  { -    return inpipe != NULL || outpipe != NULL; +    zmq_assert (inpipe && outpipe); + +    terminating = true; + +    register_term_acks (2); +    inpipe->terminate (); +    outpipe->terminate (); + +    socket_base_t::process_term ();  }  void zmq::pair_t::activated (class reader_t *pipe_)  | 
