diff options
| author | Martin Sustrik <sustrik@250bpm.com> | 2011-04-30 06:48:18 +0200 | 
|---|---|---|
| committer | Martin Sustrik <sustrik@250bpm.com> | 2011-04-30 06:48:18 +0200 | 
| commit | eb9bc1b0648d2132e612e2237a0ace47004d6f5c (patch) | |
| tree | 5c904725437a8436c428868c907aeeca57b3d0d5 /src/dist.hpp | |
| parent | fe2e772dd5d36024a91ce3abb86996599960e078 (diff) | |
Message atomicity problem in PUB socket fixed.
Reaching the HWM caused breaking message atomicity when the
flow was reestablished - initial parts of multipart messages
may have been lost.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/dist.hpp')
| -rw-r--r-- | src/dist.hpp | 20 | 
1 files changed, 9 insertions, 11 deletions
| diff --git a/src/dist.hpp b/src/dist.hpp index ea05305..fd522b9 100644 --- a/src/dist.hpp +++ b/src/dist.hpp @@ -56,24 +56,22 @@ namespace zmq          //  Put the message to all active pipes.          void distribute (class msg_t *msg_, int flags_); -        //  Plug in all the delayed pipes. -        void clear_new_pipes (); -          //  List of outbound pipes.          typedef array_t <class writer_t> pipes_t;          pipes_t pipes; -        //  List of new pipes that were not yet inserted into 'pipes' list. -        //  These pipes are moves to 'pipes' list once the current multipart -        //  message is fully sent. This way we avoid sending incomplete messages -        //  to peers. -        typedef std::vector <class writer_t*> new_pipes_t; -        new_pipes_t new_pipes; -          //  Number of active pipes. All the active pipes are located at the -        //  beginning of the pipes array. +        //  beginning of the pipes array. These are the pipes the messages +        //  can be sent to at the moment.          pipes_t::size_type active; +        //  Number of pipes eligible for sending messages to. This includes all +        //  the active pipes plus all the pipes that we can in theory send +        //  messages to (the HWM is not yet reached), but sending a message +        //  to them would result in partial message being delivered, ie. message +        //  with initial parts missing. +        pipes_t::size_type eligible; +          //  True if last we are in the middle of a multipart message.          bool more; | 
