diff --git a/src/ctx.cpp b/src/ctx.cpp index 024e813a..84f9b037 100644 --- a/src/ctx.cpp +++ b/src/ctx.cpp @@ -291,14 +291,22 @@ zmq::endpoint_t zmq::ctx_t::find_endpoint (const char *addr_) return *endpoint; } -void zmq::ctx_t::log (zmq_msg_t *msg_) +void zmq::ctx_t::log (const char *format_, va_list args_) { + // Create the log message. + zmq_msg_t msg; + int rc = zmq_msg_init_size (&msg, strlen (format_) + 1); + zmq_assert (rc == 0); + memcpy (zmq_msg_data (&msg), format_, zmq_msg_size (&msg)); + // At this point we migrate the log socket to the current thread. // We rely on mutex for executing the memory barrier. log_sync.lock (); if (log_socket) - log_socket->send (msg_, 0); + log_socket->send (&msg, 0); log_sync.unlock (); + + zmq_msg_close (&msg); } diff --git a/src/ctx.hpp b/src/ctx.hpp index c07711e5..04449c40 100644 --- a/src/ctx.hpp +++ b/src/ctx.hpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "../include/zmq.h" @@ -85,7 +86,7 @@ namespace zmq endpoint_t find_endpoint (const char *addr_); // Logging. - void log (zmq_msg_t *msg_); + void log (const char *format_, va_list args_); enum { term_tid = 0, diff --git a/src/object.cpp b/src/object.cpp index 9ec73f78..1376699a 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -18,6 +18,7 @@ */ #include +#include #include "object.hpp" #include "ctx.hpp" @@ -151,9 +152,12 @@ void zmq::object_t::destroy_socket (socket_base_t *socket_) ctx->destroy_socket (socket_); } -void zmq::object_t::log (zmq_msg_t *msg_) +void zmq::object_t::log (const char *format_, ...) { - ctx->log (msg_); + va_list args; + va_start (args, format_); + ctx->log (format_, args); + va_end (args); } zmq::io_thread_t *zmq::object_t::choose_io_thread (uint64_t affinity_) diff --git a/src/object.hpp b/src/object.hpp index 748a339a..af4303ce 100644 --- a/src/object.hpp +++ b/src/object.hpp @@ -52,7 +52,7 @@ namespace zmq void destroy_socket (class socket_base_t *socket_); // Logs an message. - void log (zmq_msg_t *msg_); + void log (const char *format_, ...); // Chooses least loaded I/O thread. class io_thread_t *choose_io_thread (uint64_t affinity_); diff --git a/src/session.cpp b/src/session.cpp index 350d0435..645ebf06 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -234,6 +234,7 @@ void zmq::session_t::process_attach (i_engine *engine_, // If the session already has an engine attached, destroy new one. // Note new engine is not plugged in yet, we don't have to unplug it. if (engine) { + log ("DPID: duplicate peer identity - disconnecting peer"); delete engine_; return; }