diff --git a/src/msg.cpp b/src/msg.cpp index 1ad9f172..72e45580 100644 --- a/src/msg.cpp +++ b/src/msg.cpp @@ -288,6 +288,15 @@ void zmq::msg_t::set_metadata (zmq::metadata_t *metadata_) u.base.metadata = metadata_; } +void zmq::msg_t::reset_metadata () +{ + if (u.base.metadata) { + if (u.base.metadata->drop_ref ()) + delete u.base.metadata; + u.base.metadata = NULL; + } +} + bool zmq::msg_t::is_identity () const { return (u.base.flags & identity) == identity; diff --git a/src/msg.hpp b/src/msg.hpp index 05c881fc..ea2bb4e4 100644 --- a/src/msg.hpp +++ b/src/msg.hpp @@ -73,6 +73,7 @@ namespace zmq void set_fd (int64_t fd_); metadata_t *metadata () const; void set_metadata (metadata_t *metadata_); + void reset_metadata (); bool is_identity () const; bool is_credential () const; bool is_delimiter () const; diff --git a/src/socket_base.cpp b/src/socket_base.cpp index e9c1a3d7..363d9844 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -799,6 +799,8 @@ int zmq::socket_base_t::send (msg_t *msg_, int flags_) if (flags_ & ZMQ_SNDMORE) msg_->set_flags (msg_t::more); + msg_->reset_metadata (); + // Try to send the message. rc = xsend (msg_); if (rc == 0)