diff options
Diffstat (limited to 'crypto/store')
-rw-r--r-- | crypto/store/store_meth.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/crypto/store/store_meth.c b/crypto/store/store_meth.c index 6f21d8f98f..ab1016853e 100644 --- a/crypto/store/store_meth.c +++ b/crypto/store/store_meth.c @@ -108,6 +108,28 @@ static OSSL_METHOD_STORE *get_loader_store(OSSL_LIB_CTX *libctx) return ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX); } +static int reserve_loader_store(void *store, void *data) +{ + struct loader_data_st *methdata = data; + + if (store == NULL + && (store = get_loader_store(methdata->libctx)) == NULL) + return 0; + + return ossl_method_lock_store(store); +} + +static int unreserve_loader_store(void *store, void *data) +{ + struct loader_data_st *methdata = data; + + if (store == NULL + && (store = get_loader_store(methdata->libctx)) == NULL) + return 0; + + return ossl_method_unlock_store(store); +} + /* Get loader methods from a store, or put one in */ static void *get_loader_from_store(void *store, const OSSL_PROVIDER **prov, void *data) @@ -283,6 +305,8 @@ inner_loader_fetch(struct loader_data_st *methdata, || !ossl_method_store_cache_get(store, NULL, id, propq, &method)) { OSSL_METHOD_CONSTRUCT_METHOD mcm = { get_tmp_loader_store, + reserve_loader_store, + unreserve_loader_store, get_loader_from_store, put_loader_in_store, construct_loader, |