summaryrefslogtreecommitdiffstats
path: root/crypto/store/store_meth.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/store/store_meth.c')
-rw-r--r--crypto/store/store_meth.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/crypto/store/store_meth.c b/crypto/store/store_meth.c
index 999d4c5e9f..a5b0d1b095 100644
--- a/crypto/store/store_meth.c
+++ b/crypto/store/store_meth.c
@@ -127,6 +127,28 @@ static OSSL_METHOD_STORE *get_loader_store(OSSL_LIB_CTX *libctx)
&loader_store_method);
}
+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)
@@ -313,6 +335,8 @@ inner_loader_fetch(struct loader_data_st *methdata, int id,
|| !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,