From 8396d98fb7faec1268232bf9e92a3c5db2ddc721 Mon Sep 17 00:00:00 2001 From: Alan Antonuk Date: Mon, 22 Jun 2020 06:08:30 +0000 Subject: lib: correct amqp_time_from_now behavior at {0, 0} Change behavior of amqp_time_from_now to set to the current timestamp when a struct timeval of {0, 0} is passed in instead of 0. This better aligns with how one would expect the function to work. As a byproduct this corrects an issue where amqp_consume_message would not return AMQP_STATUS_HEARTBEAT_TIMEOUT when a tv of {0, 0} and the heartbeat interval had passed. Fixes #557 in a more concise way. --- librabbitmq/amqp_socket.c | 5 ++++- librabbitmq/amqp_time.c | 10 ---------- librabbitmq/amqp_time.h | 4 ---- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c index 5f2878d..fdff1d2 100644 --- a/librabbitmq/amqp_socket.c +++ b/librabbitmq/amqp_socket.c @@ -760,7 +760,10 @@ int amqp_try_recv(amqp_connection_state_t state) { state->last_queued_frame = link; } } - timeout = amqp_time_immediate(); + int res = amqp_time_s_from_now(&timeout, 0); + if (AMQP_STATUS_OK != res) { + return res; + } return recv_with_timeout(state, timeout); } diff --git a/librabbitmq/amqp_time.c b/librabbitmq/amqp_time.c index d3343f6..d61483a 100644 --- a/librabbitmq/amqp_time.c +++ b/librabbitmq/amqp_time.c @@ -111,10 +111,6 @@ int amqp_time_from_now(amqp_time_t *time, const struct timeval *timeout) { *time = amqp_time_infinite(); return AMQP_STATUS_OK; } - if (0 == timeout->tv_sec && 0 == timeout->tv_usec) { - *time = amqp_time_immediate(); - return AMQP_STATUS_OK; - } if (timeout->tv_sec < 0 || timeout->tv_usec < 0) { return AMQP_STATUS_INVALID_PARAMETER; @@ -160,12 +156,6 @@ int amqp_time_s_from_now(amqp_time_t *time, int seconds) { return AMQP_STATUS_OK; } -amqp_time_t amqp_time_immediate(void) { - amqp_time_t time; - time.time_point_ns = 0; - return time; -} - amqp_time_t amqp_time_infinite(void) { amqp_time_t time; time.time_point_ns = UINT64_MAX; diff --git a/librabbitmq/amqp_time.h b/librabbitmq/amqp_time.h index 4478671..0d971a9 100644 --- a/librabbitmq/amqp_time.h +++ b/librabbitmq/amqp_time.h @@ -62,7 +62,6 @@ uint64_t amqp_get_monotonic_timestamp(void); /* Get a amqp_time_t that is timeout from now. * If timeout is NULL, an amqp_time_infinite() is created. - * If timeout = {0, 0}, an amqp_time_immediate() is created. * * Returns AMQP_STATUS_OK on success. * AMQP_STATUS_INVALID_PARAMETER if timeout is invalid @@ -80,9 +79,6 @@ int amqp_time_from_now(amqp_time_t *time, const struct timeval *timeout); */ int amqp_time_s_from_now(amqp_time_t *time, int seconds); -/* Create an immediate amqp_time_t */ -amqp_time_t amqp_time_immediate(void); - /* Create an infinite amqp_time_t */ amqp_time_t amqp_time_infinite(void); -- cgit v1.2.1