From: Hugo Landau Date: Fri, 2 Feb 2024 12:30:41 +0000 (+0000) Subject: QUIC POLLING: Implement autotick X-Git-Tag: openssl-3.3.0-alpha1~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9387bd4c25cf37613bcecc173e63f93327eb47ec;p=thirdparty%2Fopenssl.git QUIC POLLING: Implement autotick Reviewed-by: Neil Horman Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/23495) --- diff --git a/include/internal/quic_ssl.h b/include/internal/quic_ssl.h index b8922363bda..54e8a2e7e3e 100644 --- a/include/internal/quic_ssl.h +++ b/include/internal/quic_ssl.h @@ -143,7 +143,8 @@ int ossl_quic_get_shutdown(const SSL *s); int ossl_quic_set_diag_title(SSL_CTX *ctx, const char *title); /* APIs used by the polling infrastructure */ -int ossl_quic_conn_poll_events(SSL *ssl, uint64_t events, uint64_t *revents); +int ossl_quic_conn_poll_events(SSL *ssl, uint64_t events, int do_tick, + uint64_t *revents); # endif diff --git a/ssl/quic/quic_impl.c b/ssl/quic/quic_impl.c index 42e7b085e7f..d0dc04bb374 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 7de211742ad..d4fd62ad951 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)