summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorHugo Landau <hlandau@openssl.org>2024-02-02 12:30:41 +0000
committerHugo Landau <hlandau@openssl.org>2024-02-10 11:37:14 +0000
commit9387bd4c25cf37613bcecc173e63f93327eb47ec (patch)
treea43a77d441d1035fa95a4c42a2f0b158752e9367 /ssl
parentf945986a180d0af7cc3029ffbae0c826f06e5c9d (diff)
QUIC POLLING: Implement autotick
Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/23495)
Diffstat (limited to 'ssl')
-rw-r--r--ssl/quic/quic_impl.c6
-rw-r--r--ssl/rio/poll_immediate.c10
2 files changed, 6 insertions, 10 deletions
diff --git a/ssl/quic/quic_impl.c b/ssl/quic/quic_impl.c
index 42e7b085e7..d0dc04bb37 100644
--- a/ssl/quic/quic_impl.c
+++ b/ssl/quic/quic_impl.c
@@ -3921,7 +3921,8 @@ static int test_poll_event_os(QUIC_CONNECTION *qc, int is_uni)
}
QUIC_TAKES_LOCK
-int ossl_quic_conn_poll_events(SSL *ssl, uint64_t events, uint64_t *p_revents)
+int ossl_quic_conn_poll_events(SSL *ssl, uint64_t events, int do_tick,
+ uint64_t *p_revents)
{
QCTX ctx;
uint64_t revents = 0;
@@ -3931,6 +3932,9 @@ int ossl_quic_conn_poll_events(SSL *ssl, uint64_t events, uint64_t *p_revents)
quic_lock(ctx.qc);
+ if (do_tick)
+ ossl_quic_reactor_tick(ossl_quic_channel_get_reactor(ctx.qc->ch), 0);
+
if (ctx.xso != NULL) {
/* SSL object has a stream component. */
diff --git a/ssl/rio/poll_immediate.c b/ssl/rio/poll_immediate.c
index 7de211742a..d4fd62ad95 100644
--- a/ssl/rio/poll_immediate.c
+++ b/ssl/rio/poll_immediate.c
@@ -61,13 +61,6 @@ int SSL_poll(SSL_POLL_ITEM *items,
FAIL_FROM(0);
}
- if (do_tick) {
- ERR_raise_data(ERR_LIB_SSL, SSL_R_POLL_REQUEST_NOT_SUPPORTED,
- "SSL_poll does not currently support implicit I/O "
- "processing");
- FAIL_FROM(0);
- }
-
/* Trivial case. */
if (num_items == 0)
goto out;
@@ -88,7 +81,7 @@ int SSL_poll(SSL_POLL_ITEM *items,
switch (ssl->type) {
case SSL_TYPE_QUIC_CONNECTION:
case SSL_TYPE_QUIC_XSO:
- if (!ossl_quic_conn_poll_events(ssl, events, &revents))
+ if (!ossl_quic_conn_poll_events(ssl, events, do_tick, &revents))
/* above call raises ERR */
FAIL_ITEM(i);
@@ -121,7 +114,6 @@ int SSL_poll(SSL_POLL_ITEM *items,
/* TODO(QUIC POLLING): Blocking mode */
/* TODO(QUIC POLLING): Support for polling FDs */
- /* TODO(QUIC POLLING): Support for autotick */
out:
if (p_result_count != NULL)