Close messages that failed to send

pipe_t.write only takes control of the underlying message memory when it
succeeds. When it returns failure, we must close the message ourselves to
clean up that memory.

This patch is sponsored by FarSounder, Inc (farsounder.com)
This commit is contained in:
Topher Brown
2015-01-13 17:36:09 -05:00
parent 94b0ad3eaa
commit 866a04656e

View File

@@ -246,12 +246,16 @@ int zmq::router_t::xsend (msg_t *msg_)
} }
bool ok = current_out->write (msg_); bool ok = current_out->write (msg_);
if (unlikely (!ok)) if (unlikely (!ok)) {
current_out = NULL; // Message failed to send - we must close it ourselves.
else int rc = msg_->close ();
if (!more_out) { errno_assert (rc == 0);
current_out->flush ();
current_out = NULL; current_out = NULL;
} else {
if (!more_out) {
current_out->flush ();
current_out = NULL;
}
} }
} }
else { else {