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; |