Commit b1f48501 authored by Lourens Naudé's avatar Lourens Naudé

Let socket event messages initialize with zmq_msg_init_data and let the framework handle cleanup

parent f78ca629
...@@ -1178,8 +1178,10 @@ void zmq::socket_base_t::monitor_event (zmq_event_t event_) ...@@ -1178,8 +1178,10 @@ void zmq::socket_base_t::monitor_event (zmq_event_t event_)
{ {
if (monitor_socket) { if (monitor_socket) {
zmq_msg_t msg; zmq_msg_t msg;
zmq_msg_init_size (&msg, sizeof (event_)); void *event_data = malloc (sizeof (event_));
memcpy (zmq_msg_data (&msg), &event_, sizeof (event_)); assert (event_data);
memcpy (event_data, &event_, sizeof (event_));
zmq_msg_init_data (&msg, event_data, sizeof (event_), zmq_free_event, NULL);
zmq_sendmsg (monitor_socket, &msg, 0); zmq_sendmsg (monitor_socket, &msg, 0);
zmq_msg_close (&msg); zmq_msg_close (&msg);
} }
......
...@@ -38,6 +38,11 @@ ...@@ -38,6 +38,11 @@
#include "clock.hpp" #include "clock.hpp"
#include "pipe.hpp" #include "pipe.hpp"
extern "C"
{
void zmq_free_event (void *data, void *hint);
}
namespace zmq namespace zmq
{ {
......
...@@ -987,6 +987,47 @@ int zmq_device (int type, void *frontend_, void *backend_) ...@@ -987,6 +987,47 @@ int zmq_device (int type, void *frontend_, void *backend_)
(zmq::socket_base_t*) backend_, NULL); (zmq::socket_base_t*) backend_, NULL);
} }
// Callback to free socket event data
void zmq_free_event (void *event_data, void *hint)
{
zmq_event_t *event = (zmq_event_t *) event_data;
switch (event->event) {
case ZMQ_EVENT_CONNECTED:
free (event->data.connected.addr);
break;
case ZMQ_EVENT_CONNECT_DELAYED:
free (event->data.connect_delayed.addr);
break;
case ZMQ_EVENT_CONNECT_RETRIED:
free (event->data.connect_retried.addr);
break;
case ZMQ_EVENT_LISTENING:
free (event->data.listening.addr);
break;
case ZMQ_EVENT_BIND_FAILED:
free (event->data.bind_failed.addr);
break;
case ZMQ_EVENT_ACCEPTED:
free (event->data.accepted.addr);
break;
case ZMQ_EVENT_ACCEPT_FAILED:
free (event->data.accept_failed.addr);
break;
case ZMQ_EVENT_CLOSED:
free (event->data.closed.addr);
break;
case ZMQ_EVENT_CLOSE_FAILED:
free (event->data.close_failed.addr);
break;
case ZMQ_EVENT_DISCONNECTED:
free (event->data.disconnected.addr);
break;
}
free (event_data);
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// 0MQ utils - to be used by perf tests // 0MQ utils - to be used by perf tests
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment