diff options
author | Alan Antonuk <alan.antonuk@gmail.com> | 2020-06-22 06:08:30 +0000 |
---|---|---|
committer | Alan Antonuk <alan.antonuk@gmail.com> | 2020-06-21 23:28:06 -0700 |
commit | c5cf965ed6d0233468fdea69e8a314f6d46b52c8 (patch) | |
tree | a509b8cfee87809e268bc7c01a59c5d28cb6fd06 | |
parent | 6f7f7932f46018925a95118b1173a9aa8d81a50d (diff) | |
download | rabbitmq-c-c5cf965ed6d0233468fdea69e8a314f6d46b52c8.tar.gz |
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.
-rw-r--r-- | librabbitmq/amqp_socket.c | 5 | ||||
-rw-r--r-- | librabbitmq/amqp_time.c | 10 | ||||
-rw-r--r-- | 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); |