From 3de116336907323822266aed603a18633e315228 Mon Sep 17 00:00:00 2001 From: Claudio Freire Date: Mon, 10 Nov 2014 13:22:54 -0300 Subject: [PATCH 1/2] Fix busy-polling bug in pgm_sender causing it to consume CPU cycles --- src/pgm_sender.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pgm_sender.cpp b/src/pgm_sender.cpp index 5d377f5e..7155c0bc 100644 --- a/src/pgm_sender.cpp +++ b/src/pgm_sender.cpp @@ -210,8 +210,10 @@ void zmq::pgm_sender_t::out_event () zmq_assert (nbytes == 0); if (errno == ENOMEM) { + // Stop polling handle and wait for tx timeout const long timeout = pgm_socket.get_tx_timeout (); add_timer (timeout, tx_timer_id); + reset_pollout (handle); has_tx_timer = true; } else @@ -228,7 +230,9 @@ void zmq::pgm_sender_t::timer_event (int token) } else if (token == tx_timer_id) { + // Restart polling handle and retry sending has_tx_timer = false; + set_pollout (handle); out_event (); } else From 6a227b2ee4ffd79ea1b12b3277c8b534ba62b12d Mon Sep 17 00:00:00 2001 From: Claudio Freire Date: Mon, 10 Nov 2014 14:00:34 -0300 Subject: [PATCH 2/2] Re-enable pollout before cancelling tx timeout --- src/pgm_sender.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pgm_sender.cpp b/src/pgm_sender.cpp index 7155c0bc..448442c8 100644 --- a/src/pgm_sender.cpp +++ b/src/pgm_sender.cpp @@ -197,6 +197,7 @@ void zmq::pgm_sender_t::out_event () if (has_tx_timer) { cancel_timer (tx_timer_id); + set_pollout (handle); has_tx_timer = false; }