diff options
author | Hugo Landau <hlandau@openssl.org> | 2024-02-02 12:30:41 +0000 |
---|---|---|
committer | Hugo Landau <hlandau@openssl.org> | 2024-02-10 11:37:14 +0000 |
commit | 9387bd4c25cf37613bcecc173e63f93327eb47ec (patch) | |
tree | a43a77d441d1035fa95a4c42a2f0b158752e9367 | |
parent | f945986a180d0af7cc3029ffbae0c826f06e5c9d (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)
-rw-r--r-- | include/internal/quic_ssl.h | 3 | ||||
-rw-r--r-- | ssl/quic/quic_impl.c | 6 | ||||
-rw-r--r-- | ssl/rio/poll_immediate.c | 10 |
3 files changed, 8 insertions, 11 deletions
diff --git a/include/internal/quic_ssl.h b/include/internal/quic_ssl.h index b8922363bd..54e8a2e7e3 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 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) |