Lines Matching refs:store

73      * Lock to reserve the whole store.  This is used when fetching a set
105 static void ossl_method_cache_flush_alg(OSSL_METHOD_STORE *store,
107 static void ossl_method_cache_flush(OSSL_METHOD_STORE *store, int nid);
232 OSSL_METHOD_STORE *store = arg;
240 if (store != NULL)
241 ossl_sa_ALGORITHM_set(store->algs, idx, NULL);
265 void ossl_method_store_free(OSSL_METHOD_STORE *store)
267 if (store != NULL) {
268 if (store->algs != NULL)
269 ossl_sa_ALGORITHM_doall_arg(store->algs, &alg_cleanup, store);
270 ossl_sa_ALGORITHM_free(store->algs);
271 CRYPTO_THREAD_lock_free(store->lock);
272 CRYPTO_THREAD_lock_free(store->biglock);
273 OPENSSL_free(store);
277 int ossl_method_lock_store(OSSL_METHOD_STORE *store)
279 return store != NULL ? CRYPTO_THREAD_write_lock(store->biglock) : 0;
282 int ossl_method_unlock_store(OSSL_METHOD_STORE *store)
284 return store != NULL ? CRYPTO_THREAD_unlock(store->biglock) : 0;
287 static ALGORITHM *ossl_method_store_retrieve(OSSL_METHOD_STORE *store, int nid)
289 return ossl_sa_ALGORITHM_get(store->algs, nid);
292 static int ossl_method_store_insert(OSSL_METHOD_STORE *store, ALGORITHM *alg)
294 return ossl_sa_ALGORITHM_set(store->algs, alg->nid, alg);
297 int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov,
307 if (nid <= 0 || method == NULL || store == NULL)
329 if (!ossl_property_write_lock(store)) {
333 ossl_method_cache_flush(store, nid);
334 if ((impl->properties = ossl_prop_defn_get(store->ctx, properties)) == NULL) {
335 impl->properties = ossl_parse_property(store->ctx, properties);
338 if (!ossl_prop_defn_set(store->ctx, properties, &impl->properties)) {
345 alg = ossl_method_store_retrieve(store, nid);
352 if (!ossl_method_store_insert(store, alg))
367 ossl_property_unlock(store);
373 ossl_property_unlock(store);
379 int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid,
385 if (nid <= 0 || method == NULL || store == NULL)
388 if (!ossl_property_write_lock(store))
390 ossl_method_cache_flush(store, nid);
391 alg = ossl_method_store_retrieve(store, nid);
393 ossl_property_unlock(store);
408 ossl_property_unlock(store);
412 ossl_property_unlock(store);
417 OSSL_METHOD_STORE *store;
448 ossl_method_cache_flush_alg(data->store, alg);
451 int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store,
456 if (!ossl_property_write_lock(store))
459 data.store = store;
460 ossl_sa_ALGORITHM_doall_arg(store->algs, &alg_cleanup_by_provider, &data);
461 ossl_property_unlock(store);
489 void ossl_method_store_do_all(OSSL_METHOD_STORE *store,
497 if (store != NULL)
498 ossl_sa_ALGORITHM_doall_arg(store->algs, alg_do_each, &data);
501 int ossl_method_store_fetch(OSSL_METHOD_STORE *store,
513 if (nid <= 0 || method == NULL || store == NULL)
517 if (ossl_lib_ctx_is_default(store->ctx)
523 if (!ossl_property_read_lock(store))
525 alg = ossl_method_store_retrieve(store, nid);
527 ossl_property_unlock(store);
532 p2 = pq = ossl_parse_query(store->ctx, prop_query, 0);
533 plp = ossl_ctx_global_properties(store->ctx, 0);
579 ossl_property_unlock(store);
584 static void ossl_method_cache_flush_alg(OSSL_METHOD_STORE *store,
587 store->cache_nelem -= lh_QUERY_num_items(alg->cache);
591 static void ossl_method_cache_flush(OSSL_METHOD_STORE *store, int nid)
593 ALGORITHM *alg = ossl_method_store_retrieve(store, nid);
596 ossl_method_cache_flush_alg(store, alg);
599 int ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store)
601 if (!ossl_property_write_lock(store))
603 ossl_sa_ALGORITHM_doall(store->algs, &impl_cache_flush_alg);
604 store->cache_nelem = 0;
605 ossl_property_unlock(store);
660 static void ossl_method_cache_flush_some(OSSL_METHOD_STORE *store)
672 store->cache_need_flush = 0;
673 ossl_sa_ALGORITHM_doall_arg(store->algs, &impl_cache_flush_one_alg, &state);
674 store->cache_nelem = state.nelem;
680 int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
687 if (nid <= 0 || store == NULL || prop_query == NULL)
690 if (!ossl_property_read_lock(store))
692 alg = ossl_method_store_retrieve(store, nid);
706 ossl_property_unlock(store);
710 int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
720 if (nid <= 0 || store == NULL || prop_query == NULL)
726 if (!ossl_property_write_lock(store))
728 if (store->cache_need_flush)
729 ossl_method_cache_flush_some(store);
730 alg = ossl_method_store_retrieve(store, nid);
739 store->cache_nelem--;
758 if (++store->cache_nelem >= IMPL_CACHE_FLUSH_THRESHOLD)
759 store->cache_need_flush = 1;
768 ossl_property_unlock(store);