summaryrefslogtreecommitdiff
path: root/src/xpub.cpp
diff options
context:
space:
mode:
authorMartin Lucina <martin@lucina.net>2012-02-16 10:05:18 +0900
committerMartin Sustrik <sustrik@250bpm.com>2012-02-16 10:05:18 +0900
commit858b8ad76757624464c139be2367f0dce53f8c3b (patch)
treebf174496a722d151d33e861f9bdd43a199007b1d /src/xpub.cpp
parentcfba1f07987434263843f4aaee11ec088ec6ced3 (diff)
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 <martin@lucina.net>
Diffstat (limited to 'src/xpub.cpp')
-rw-r--r--src/xpub.cpp7
1 files changed, 6 insertions, 1 deletions
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_);