mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-09 15:26:04 +00:00
Let socket event messages initialize with zmq_msg_init_data and let the framework handle cleanup
This commit is contained in:
parent
f78ca629b5
commit
b1f4850153
@ -1178,8 +1178,10 @@ void zmq::socket_base_t::monitor_event (zmq_event_t event_)
|
||||
{
|
||||
if (monitor_socket) {
|
||||
zmq_msg_t msg;
|
||||
zmq_msg_init_size (&msg, sizeof (event_));
|
||||
memcpy (zmq_msg_data (&msg), &event_, sizeof (event_));
|
||||
void *event_data = malloc (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_msg_close (&msg);
|
||||
}
|
||||
|
@ -38,6 +38,11 @@
|
||||
#include "clock.hpp"
|
||||
#include "pipe.hpp"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
void zmq_free_event (void *data, void *hint);
|
||||
}
|
||||
|
||||
namespace zmq
|
||||
{
|
||||
|
||||
|
41
src/zmq.cpp
41
src/zmq.cpp
@ -987,6 +987,47 @@ int zmq_device (int type, void *frontend_, void *backend_)
|
||||
(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
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
x
Reference in New Issue
Block a user