From 858b8ad76757624464c139be2367f0dce53f8c3b Mon Sep 17 00:00:00 2001 From: Martin Lucina Date: Thu, 16 Feb 2012 10:05:18 +0900 Subject: Fix data loss for PUB/SUB and unidirectional transports (LIBZMQ-268) With the introduction of subscription forwarding, the first message sent on a PUB socket using a unidirectional transport (e.g. PGM) is always lost due to the "subscribe to all" being done asynchronously. This patch fixes the problem and also refactors the code to have a single point where the "subscribe to all" is performed. Signed-off-by: Martin Lucina --- src/xpub.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/xpub.cpp') diff --git a/src/xpub.cpp b/src/xpub.cpp index bf73399..b4bc135 100644 --- a/src/xpub.cpp +++ b/src/xpub.cpp @@ -37,11 +37,16 @@ xs::xpub_t::~xpub_t () { } -void xs::xpub_t::xattach_pipe (pipe_t *pipe_) +void xs::xpub_t::xattach_pipe (pipe_t *pipe_, bool icanhasall_) { xs_assert (pipe_); dist.attach (pipe_); + // If icanhasall_ is specified, the caller would like to subscribe + // to all data on this pipe, implicitly. + if (icanhasall_) + subscriptions.add (NULL, 0, pipe_); + // The pipe is active when attached. Let's read the subscriptions from // it, if any. xread_activated (pipe_); -- cgit v1.2.3