Skip to content

Commit

Permalink
coap_io.c: Cleanup timeout checking code in coap_io_process_with_fds()
Browse files Browse the repository at this point in the history
Should fix CID: 1583564
  • Loading branch information
mrdeep1 committed Feb 12, 2024
1 parent 5efe163 commit 224aa74
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/coap_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -1561,7 +1561,8 @@ coap_io_process_with_fds(coap_context_t *ctx, uint32_t timeout_ms,
timeout = coap_io_prepare_io(ctx, ctx->sockets,
(sizeof(ctx->sockets) / sizeof(ctx->sockets[0])),
&ctx->num_sockets, before);
if (timeout == 0 || timeout_ms < timeout)
if (timeout_ms != COAP_IO_NO_WAIT && timeout_ms != COAP_IO_WAIT &&
timeout_ms < timeout)
timeout = timeout_ms;

if (ereadfds) {
Expand Down Expand Up @@ -1604,6 +1605,7 @@ coap_io_process_with_fds(coap_context_t *ctx, uint32_t timeout_ms,
tv.tv_sec = 0;
timeout = 1;
} else if (timeout > 0) {
/* Ignore timeout_ms == COAP_IO_WAIT as there is something coming up */
tv.tv_usec = (timeout % 1000) * 1000;
tv.tv_sec = (long)(timeout / 1000);
}
Expand Down Expand Up @@ -1672,7 +1674,8 @@ coap_io_process_with_fds(coap_context_t *ctx, uint32_t timeout_ms,

timeout = coap_io_prepare_epoll(ctx, before);

if (timeout == 0 || timeout_ms < timeout)
if (timeout_ms != COAP_IO_NO_WAIT && timeout_ms != COAP_IO_WAIT &&
timeout_ms < timeout)
timeout = timeout_ms;

do {
Expand All @@ -1681,12 +1684,19 @@ coap_io_process_with_fds(coap_context_t *ctx, uint32_t timeout_ms,

/* Potentially adjust based on what the caller wants */
if (timeout_ms == COAP_IO_NO_WAIT) {
/* Need to return immediately from epoll_wait() */
etimeout = 0;
} else if (timeout == COAP_IO_WAIT) {
/* coap_io_prepare_epoll() returned 0 and timeout_ms COAP_IO_WAIT (0) */
} else if (timeout == 0 && timeout_ms == COAP_IO_WAIT) {
/*
* Nothing found in coap_io_prepare_epoll() and COAP_IO_WAIT set,
* so wait forever in epoll_wait().
*/
etimeout = -1;
} else if (etimeout < 0) {
/* epoll_wait cannot wait longer than this as int timeout parameter */
/*
* If timeout > INT_MAX, epoll_wait() cannot wait longer than this as
* it has int timeout parameter
*/
etimeout = INT_MAX;
}

Expand Down

0 comments on commit 224aa74

Please sign in to comment.