diff options
author | Richard Levitte <levitte@openssl.org> | 2022-04-14 17:52:12 +0200 |
---|---|---|
committer | Hugo Landau <hlandau@openssl.org> | 2022-07-20 07:28:17 +0100 |
commit | e1eafe8c87612a94552e9ad5df56c489cb6f0ff2 (patch) | |
tree | 1f5bc3b2087f9280313f3b59a43509a897d62508 /include/internal/property.h | |
parent | d768f853bb05b5a49a2aeb5b5702776834e68d06 (diff) |
"Reserve" the method store when constructing methods
Introducing the concept of reserving the store where a number of
provided operation methods are to be stored.
This avoids racing when constructing provided methods, which is
especially pertinent when multiple threads are trying to fetch the
same method, or even any implementation for the same given operation
type.
This introduces a |biglock| in OSSL_METHOD_STORE, which is separate
from the |lock| which is used for more internal and finer grained
locking.
Fixes #18152
Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18153)
Diffstat (limited to 'include/internal/property.h')
-rw-r--r-- | include/internal/property.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/internal/property.h b/include/internal/property.h index db08c33cc3..3adff49940 100644 --- a/include/internal/property.h +++ b/include/internal/property.h @@ -52,6 +52,10 @@ int64_t ossl_property_get_number_value(const OSSL_PROPERTY_DEFINITION *prop); /* Implementation store functions */ OSSL_METHOD_STORE *ossl_method_store_new(OSSL_LIB_CTX *ctx); void ossl_method_store_free(OSSL_METHOD_STORE *store); + +int ossl_method_lock_store(OSSL_METHOD_STORE *store); +int ossl_method_unlock_store(OSSL_METHOD_STORE *store); + int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov, int nid, const char *properties, void *method, int (*method_up_ref)(void *), |