diff --git a/NEWS b/NEWS index 85ac684f..406e1fe6 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,8 @@ * Fixed #1377, #1144 - failed with WSANOTINITIALISED in some cases. +* Fixed #1389 - PUB, PUSH sockets had slow memory leak. + 0MQ version 4.0.5 stable, released on 2014/10/14 ================================================ diff --git a/src/pub.cpp b/src/pub.cpp index e84f3c30..e3d60696 100644 --- a/src/pub.cpp +++ b/src/pub.cpp @@ -18,6 +18,8 @@ */ #include "pub.hpp" +#include "pipe.hpp" +#include "err.hpp" #include "msg.hpp" zmq::pub_t::pub_t (class ctx_t *parent_, uint32_t tid_, int sid_) : @@ -30,6 +32,17 @@ zmq::pub_t::~pub_t () { } +void zmq::pub_t::xattach_pipe (pipe_t *pipe_, bool subscribe_to_all_) +{ + zmq_assert (pipe_); + + // Don't delay pipe termination as there is no one + // to receive the delimiter. + pipe_->set_nodelay (); + + xpub_t::xattach_pipe (pipe_, subscribe_to_all_); +} + int zmq::pub_t::xrecv (class msg_t *) { // Messages cannot be received from PUB socket. diff --git a/src/pub.hpp b/src/pub.hpp index 4fe3a79d..d3dc6c90 100644 --- a/src/pub.hpp +++ b/src/pub.hpp @@ -38,6 +38,7 @@ namespace zmq ~pub_t (); // Implementations of virtual functions from socket_base_t. + void xattach_pipe (zmq::pipe_t *pipe_, bool subscribe_to_all_ = false); int xrecv (zmq::msg_t *msg_); bool xhas_in (); diff --git a/src/push.cpp b/src/push.cpp index 673d2be6..acb852c3 100644 --- a/src/push.cpp +++ b/src/push.cpp @@ -36,6 +36,9 @@ void zmq::push_t::xattach_pipe (pipe_t *pipe_, bool subscribe_to_all_) { // subscribe_to_all_ is unused (void)subscribe_to_all_; + // Don't delay pipe termination as there is no one + // to receive the delimiter. + pipe_->set_nodelay (); zmq_assert (pipe_); lb.attach (pipe_);