From: Jakub Zelenka Date: Tue, 19 May 2026 10:02:28 +0000 (+0200) Subject: Optimize hashtable without rcu freeing X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f99ffceb4b0399c1ff738e738de430553c9ffd52;p=thirdparty%2Fopenssl.git Optimize hashtable without rcu freeing It is not necessary to flush table for hash tables without rcu. This is follow up to https://github.com/openssl/openssl/pull/31163 Reviewed-by: Neil Horman Reviewed-by: Paul Dale Reviewed-by: Tomas Mraz MergeDate: Thu May 21 09:09:36 2026 (Merged from https://github.com/openssl/openssl/pull/31237) --- diff --git a/crypto/hashtable/hashtable.c b/crypto/hashtable/hashtable.c index 7b3da99c6d0..1cce15ed244 100644 --- a/crypto/hashtable/hashtable.c +++ b/crypto/hashtable/hashtable.c @@ -368,22 +368,23 @@ void ossl_ht_free(HT *h) if (h == NULL) return; - ossl_ht_write_lock(h); - flush_ok = ossl_ht_flush_internal(h); - ossl_ht_write_unlock(h); - /* Freeing the lock does a final sync for us */ - if (!h->config.no_rcu) { + if (h->config.no_rcu) { + free_oldmd(h->md); + } else { + ossl_ht_write_lock(h); + flush_ok = ossl_ht_flush_internal(h); + ossl_ht_write_unlock(h); + /* Freeing the lock does a final sync for us */ CRYPTO_THREAD_lock_free(h->atomic_lock); ossl_rcu_lock_free(h->lock); - } - if (flush_ok) { - OPENSSL_free(h->md->neighborhood_ptr_to_free); - OPENSSL_free(h->md); - } else { - free_oldmd(h->md); + if (flush_ok) { + OPENSSL_free(h->md->neighborhood_ptr_to_free); + OPENSSL_free(h->md); + } else { + free_oldmd(h->md); + } } OPENSSL_free(h); - return; } size_t ossl_ht_count(HT *h)