Lines Matching refs:store

73      * Lock to reserve the whole store.  This is used when fetching a set
107 static void ossl_method_cache_flush_alg(OSSL_METHOD_STORE *store,
109 static void ossl_method_cache_flush(OSSL_METHOD_STORE *store, int nid);
234 OSSL_METHOD_STORE *store = arg;
242 if (store != NULL)
243 ossl_sa_ALGORITHM_set(store->algs, idx, NULL);
267 void ossl_method_store_free(OSSL_METHOD_STORE *store)
269 if (store != NULL) {
270 if (store->algs != NULL)
271 ossl_sa_ALGORITHM_doall_arg(store->algs, &alg_cleanup, store);
272 ossl_sa_ALGORITHM_free(store->algs);
273 CRYPTO_THREAD_lock_free(store->lock);
274 CRYPTO_THREAD_lock_free(store->biglock);
275 OPENSSL_free(store);
279 int ossl_method_lock_store(OSSL_METHOD_STORE *store)
281 return store != NULL ? CRYPTO_THREAD_write_lock(store->biglock) : 0;
284 int ossl_method_unlock_store(OSSL_METHOD_STORE *store)
286 return store != NULL ? CRYPTO_THREAD_unlock(store->biglock) : 0;
289 static ALGORITHM *ossl_method_store_retrieve(OSSL_METHOD_STORE *store, int nid)
291 return ossl_sa_ALGORITHM_get(store->algs, nid);
294 static int ossl_method_store_insert(OSSL_METHOD_STORE *store, ALGORITHM *alg)
296 return ossl_sa_ALGORITHM_set(store->algs, alg->nid, alg);
299 int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov,
309 if (nid <= 0 || method == NULL || store == NULL)
331 if (!ossl_property_write_lock(store)) {
335 ossl_method_cache_flush(store, nid);
336 if ((impl->properties = ossl_prop_defn_get(store->ctx, properties)) == NULL) {
337 impl->properties = ossl_parse_property(store->ctx, properties);
340 if (!ossl_prop_defn_set(store->ctx, properties, &impl->properties)) {
347 alg = ossl_method_store_retrieve(store, nid);
354 if (!ossl_method_store_insert(store, alg))
369 ossl_property_unlock(store);
375 ossl_property_unlock(store);
381 int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid,
387 if (nid <= 0 || method == NULL || store == NULL)
390 if (!ossl_property_write_lock(store))
392 ossl_method_cache_flush(store, nid);
393 alg = ossl_method_store_retrieve(store, nid);
395 ossl_property_unlock(store);
410 ossl_property_unlock(store);
414 ossl_property_unlock(store);
419 OSSL_METHOD_STORE *store;
450 ossl_method_cache_flush_alg(data->store, alg);
453 int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store,
458 if (!ossl_property_write_lock(store))
461 data.store = store;
462 ossl_sa_ALGORITHM_doall_arg(store->algs, &alg_cleanup_by_provider, &data);
463 ossl_property_unlock(store);
481 void ossl_method_store_do_all(OSSL_METHOD_STORE *store,
490 if (store != NULL) {
492 if (!ossl_property_read_lock(store))
496 ossl_sa_ALGORITHM_num(store->algs));
498 ossl_property_unlock(store);
502 ossl_sa_ALGORITHM_doall_arg(store->algs, alg_copy, tmpalgs);
503 ossl_property_unlock(store);
515 int ossl_method_store_fetch(OSSL_METHOD_STORE *store,
527 if (nid <= 0 || method == NULL || store == NULL)
531 if (ossl_lib_ctx_is_default(store->ctx)
537 if (!ossl_property_read_lock(store))
539 alg = ossl_method_store_retrieve(store, nid);
541 ossl_property_unlock(store);
546 p2 = pq = ossl_parse_query(store->ctx, prop_query, 0);
547 plp = ossl_ctx_global_properties(store->ctx, 0);
593 ossl_property_unlock(store);
598 static void ossl_method_cache_flush_alg(OSSL_METHOD_STORE *store,
601 store->cache_nelem -= lh_QUERY_num_items(alg->cache);
605 static void ossl_method_cache_flush(OSSL_METHOD_STORE *store, int nid)
607 ALGORITHM *alg = ossl_method_store_retrieve(store, nid);
610 ossl_method_cache_flush_alg(store, alg);
613 int ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store)
615 if (!ossl_property_write_lock(store))
617 ossl_sa_ALGORITHM_doall(store->algs, &impl_cache_flush_alg);
618 store->cache_nelem = 0;
619 ossl_property_unlock(store);
674 static void ossl_method_cache_flush_some(OSSL_METHOD_STORE *store)
686 store->cache_need_flush = 0;
687 ossl_sa_ALGORITHM_doall_arg(store->algs, &impl_cache_flush_one_alg, &state);
688 store->cache_nelem = state.nelem;
694 int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
701 if (nid <= 0 || store == NULL || prop_query == NULL)
704 if (!ossl_property_read_lock(store))
706 alg = ossl_method_store_retrieve(store, nid);
720 ossl_property_unlock(store);
724 int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
734 if (nid <= 0 || store == NULL || prop_query == NULL)
740 if (!ossl_property_write_lock(store))
742 if (store->cache_need_flush)
743 ossl_method_cache_flush_some(store);
744 alg = ossl_method_store_retrieve(store, nid);
753 store->cache_nelem--;
772 if (++store->cache_nelem >= IMPL_CACHE_FLUSH_THRESHOLD)
773 store->cache_need_flush = 1;
782 ossl_property_unlock(store);