From: Tomas Mraz Date: Tue, 10 Sep 2024 07:10:53 +0000 (+0200) Subject: SSL_poll(): Report result_count for failed events X-Git-Tag: openssl-3.5.0-alpha1~337 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=89134200b8f1c122fa4795ab3a69615d9bbab51d;p=thirdparty%2Fopenssl.git SSL_poll(): Report result_count for failed events Reviewed-by: Matt Caswell Reviewed-by: Saša Nedvědický (Merged from https://github.com/openssl/openssl/pull/25416) --- diff --git a/ssl/rio/poll_immediate.c b/ssl/rio/poll_immediate.c index e1bc2391177..76b2db7a807 100644 --- a/ssl/rio/poll_immediate.c +++ b/ssl/rio/poll_immediate.c @@ -32,6 +32,7 @@ #define FAIL_ITEM(idx) \ do { \ size_t idx_ = (idx); \ + \ ITEM_N(items, stride, idx_).revents = SSL_POLL_EVENT_F; \ ++result_count; \ FAIL_FROM(idx_ + 1); \ @@ -190,7 +191,8 @@ static int poll_translate(SSL_POLL_ITEM *items, QUIC_REACTOR_WAIT_CTX *wctx, RIO_POLL_BUILDER *rpb, OSSL_TIME *p_earliest_wakeup_deadline, - int *abort_blocking) + int *abort_blocking, + size_t *p_result_count) { int ok = 1; SSL_POLL_ITEM *item; @@ -262,13 +264,15 @@ out: postpoll_translation_cleanup(items, i, stride, wctx); *p_earliest_wakeup_deadline = earliest_wakeup_deadline; + *p_result_count = result_count; return ok; } static int poll_block(SSL_POLL_ITEM *items, size_t num_items, size_t stride, - OSSL_TIME user_deadline) + OSSL_TIME user_deadline, + size_t *p_result_count) { int ok = 0, abort_blocking = 0; RIO_POLL_BUILDER rpb; @@ -301,7 +305,8 @@ static int poll_block(SSL_POLL_ITEM *items, if (!poll_translate(items, num_items, stride, &wctx, &rpb, &earliest_wakeup_deadline, - &abort_blocking)) + &abort_blocking, + p_result_count)) goto out; if (abort_blocking) @@ -423,7 +428,6 @@ int SSL_poll(SSL_POLL_ITEM *items, for (;;) { /* Readout phase - poll current state of each item. */ if (!poll_readout(items, num_items, stride, do_tick, &result_count)) { - result_count = 0; ok = 0; goto out; }