Lines Matching refs:ctx

46 int ossl_lib_ctx_write_lock(OSSL_LIB_CTX *ctx)  in ossl_lib_ctx_write_lock()  argument
48 return CRYPTO_THREAD_write_lock(ossl_lib_ctx_get_concrete(ctx)->lock); in ossl_lib_ctx_write_lock()
51 int ossl_lib_ctx_read_lock(OSSL_LIB_CTX *ctx) in ossl_lib_ctx_read_lock() argument
53 return CRYPTO_THREAD_read_lock(ossl_lib_ctx_get_concrete(ctx)->lock); in ossl_lib_ctx_read_lock()
56 int ossl_lib_ctx_unlock(OSSL_LIB_CTX *ctx) in ossl_lib_ctx_unlock() argument
58 return CRYPTO_THREAD_unlock(ossl_lib_ctx_get_concrete(ctx)->lock); in ossl_lib_ctx_unlock()
61 int ossl_lib_ctx_is_child(OSSL_LIB_CTX *ctx) in ossl_lib_ctx_is_child() argument
63 ctx = ossl_lib_ctx_get_concrete(ctx); in ossl_lib_ctx_is_child()
65 if (ctx == NULL) in ossl_lib_ctx_is_child()
67 return ctx->ischild; in ossl_lib_ctx_is_child()
70 static int context_init(OSSL_LIB_CTX *ctx) in context_init() argument
75 ctx->lock = CRYPTO_THREAD_lock_new(); in context_init()
76 if (ctx->lock == NULL) in context_init()
79 ctx->oncelock = CRYPTO_THREAD_lock_new(); in context_init()
80 if (ctx->oncelock == NULL) in context_init()
84 ctx->index_locks[i] = CRYPTO_THREAD_lock_new(); in context_init()
85 ctx->dyn_indexes[i] = -1; in context_init()
86 if (ctx->index_locks[i] == NULL) in context_init()
91 if (!ossl_do_ex_data_init(ctx)) in context_init()
95 if (!ossl_crypto_new_ex_data_ex(ctx, CRYPTO_EX_INDEX_OSSL_LIB_CTX, NULL, in context_init()
96 &ctx->data)) { in context_init()
97 ossl_crypto_cleanup_all_ex_data_int(ctx); in context_init()
102 if (!ossl_property_parse_init(ctx)) in context_init()
108 ossl_crypto_cleanup_all_ex_data_int(ctx); in context_init()
109 CRYPTO_THREAD_lock_free(ctx->oncelock); in context_init()
110 CRYPTO_THREAD_lock_free(ctx->lock); in context_init()
111 ctx->lock = NULL; in context_init()
115 static int context_deinit(OSSL_LIB_CTX *ctx) in context_deinit() argument
120 if (ctx == NULL) in context_deinit()
123 ossl_ctx_thread_stop(ctx); in context_deinit()
125 onfree = ctx->onfreelist; in context_deinit()
127 onfree->fn(ctx); in context_deinit()
132 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_OSSL_LIB_CTX, NULL, &ctx->data); in context_deinit()
133 ossl_crypto_cleanup_all_ex_data_int(ctx); in context_deinit()
135 CRYPTO_THREAD_lock_free(ctx->index_locks[i]); in context_deinit()
137 CRYPTO_THREAD_lock_free(ctx->oncelock); in context_deinit()
138 CRYPTO_THREAD_lock_free(ctx->lock); in context_deinit()
139 ctx->lock = NULL; in context_deinit()
189 OSSL_LIB_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx)); in OSSL_LIB_CTX_new() local
191 if (ctx != NULL && !context_init(ctx)) { in OSSL_LIB_CTX_new()
192 OSSL_LIB_CTX_free(ctx); in OSSL_LIB_CTX_new()
193 ctx = NULL; in OSSL_LIB_CTX_new()
195 return ctx; in OSSL_LIB_CTX_new()
202 OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new(); in OSSL_LIB_CTX_new_from_dispatch() local
204 if (ctx == NULL) in OSSL_LIB_CTX_new_from_dispatch()
207 if (!ossl_bio_init_core(ctx, in)) { in OSSL_LIB_CTX_new_from_dispatch()
208 OSSL_LIB_CTX_free(ctx); in OSSL_LIB_CTX_new_from_dispatch()
212 return ctx; in OSSL_LIB_CTX_new_from_dispatch()
218 OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new_from_dispatch(handle, in); in OSSL_LIB_CTX_new_child() local
220 if (ctx == NULL) in OSSL_LIB_CTX_new_child()
223 if (!ossl_provider_init_as_child(ctx, handle, in)) { in OSSL_LIB_CTX_new_child()
224 OSSL_LIB_CTX_free(ctx); in OSSL_LIB_CTX_new_child()
227 ctx->ischild = 1; in OSSL_LIB_CTX_new_child()
229 return ctx; in OSSL_LIB_CTX_new_child()
232 int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file) in OSSL_LIB_CTX_load_config() argument
234 return CONF_modules_load_file_ex(ctx, config_file, NULL, 0) > 0; in OSSL_LIB_CTX_load_config()
238 void OSSL_LIB_CTX_free(OSSL_LIB_CTX *ctx) in OSSL_LIB_CTX_free() argument
240 if (ossl_lib_ctx_is_default(ctx)) in OSSL_LIB_CTX_free()
244 if (ctx->ischild) in OSSL_LIB_CTX_free()
245 ossl_provider_deinit_child(ctx); in OSSL_LIB_CTX_free()
247 context_deinit(ctx); in OSSL_LIB_CTX_free()
248 OPENSSL_free(ctx); in OSSL_LIB_CTX_free()
274 OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx) in ossl_lib_ctx_get_concrete() argument
277 if (ctx == NULL) in ossl_lib_ctx_get_concrete()
280 return ctx; in ossl_lib_ctx_get_concrete()
283 int ossl_lib_ctx_is_default(OSSL_LIB_CTX *ctx) in ossl_lib_ctx_is_default() argument
286 if (ctx == NULL || ctx == get_default_context()) in ossl_lib_ctx_is_default()
292 int ossl_lib_ctx_is_global_default(OSSL_LIB_CTX *ctx) in ossl_lib_ctx_is_global_default() argument
295 if (ossl_lib_ctx_get_concrete(ctx) == &default_context_int) in ossl_lib_ctx_is_global_default()
306 OSSL_LIB_CTX *ctx = ossl_crypto_ex_data_get_ossl_lib_ctx(ad); in ossl_lib_ctx_generic_new() local
307 void *ptr = meth->new_func(ctx); in ossl_lib_ctx_generic_new()
310 if (!CRYPTO_THREAD_write_lock(ctx->lock)) in ossl_lib_ctx_generic_new()
317 CRYPTO_THREAD_unlock(ctx->lock); in ossl_lib_ctx_generic_new()
329 static int ossl_lib_ctx_init_index(OSSL_LIB_CTX *ctx, int static_index, in ossl_lib_ctx_init_index() argument
334 ctx = ossl_lib_ctx_get_concrete(ctx); in ossl_lib_ctx_init_index()
335 if (ctx == NULL) in ossl_lib_ctx_init_index()
338 idx = ossl_crypto_get_ex_new_index_ex(ctx, CRYPTO_EX_INDEX_OSSL_LIB_CTX, 0, in ossl_lib_ctx_init_index()
346 ctx->dyn_indexes[static_index] = idx; in ossl_lib_ctx_init_index()
350 void *ossl_lib_ctx_get_data(OSSL_LIB_CTX *ctx, int index, in ossl_lib_ctx_get_data() argument
356 ctx = ossl_lib_ctx_get_concrete(ctx); in ossl_lib_ctx_get_data()
357 if (ctx == NULL) in ossl_lib_ctx_get_data()
360 if (!CRYPTO_THREAD_read_lock(ctx->lock)) in ossl_lib_ctx_get_data()
362 dynidx = ctx->dyn_indexes[index]; in ossl_lib_ctx_get_data()
363 CRYPTO_THREAD_unlock(ctx->lock); in ossl_lib_ctx_get_data()
366 if (!CRYPTO_THREAD_read_lock(ctx->index_locks[index])) in ossl_lib_ctx_get_data()
368 if (!CRYPTO_THREAD_read_lock(ctx->lock)) { in ossl_lib_ctx_get_data()
369 CRYPTO_THREAD_unlock(ctx->index_locks[index]); in ossl_lib_ctx_get_data()
372 data = CRYPTO_get_ex_data(&ctx->data, dynidx); in ossl_lib_ctx_get_data()
373 CRYPTO_THREAD_unlock(ctx->lock); in ossl_lib_ctx_get_data()
374 CRYPTO_THREAD_unlock(ctx->index_locks[index]); in ossl_lib_ctx_get_data()
378 if (!CRYPTO_THREAD_write_lock(ctx->index_locks[index])) in ossl_lib_ctx_get_data()
380 if (!CRYPTO_THREAD_write_lock(ctx->lock)) { in ossl_lib_ctx_get_data()
381 CRYPTO_THREAD_unlock(ctx->index_locks[index]); in ossl_lib_ctx_get_data()
385 dynidx = ctx->dyn_indexes[index]; in ossl_lib_ctx_get_data()
387 data = CRYPTO_get_ex_data(&ctx->data, dynidx); in ossl_lib_ctx_get_data()
388 CRYPTO_THREAD_unlock(ctx->lock); in ossl_lib_ctx_get_data()
389 CRYPTO_THREAD_unlock(ctx->index_locks[index]); in ossl_lib_ctx_get_data()
393 if (!ossl_lib_ctx_init_index(ctx, index, meth)) { in ossl_lib_ctx_get_data()
394 CRYPTO_THREAD_unlock(ctx->lock); in ossl_lib_ctx_get_data()
395 CRYPTO_THREAD_unlock(ctx->index_locks[index]); in ossl_lib_ctx_get_data()
399 CRYPTO_THREAD_unlock(ctx->lock); in ossl_lib_ctx_get_data()
412 &ctx->data, ctx->dyn_indexes[index])) { in ossl_lib_ctx_get_data()
413 if (!CRYPTO_THREAD_read_lock(ctx->lock)) in ossl_lib_ctx_get_data()
415 data = CRYPTO_get_ex_data(&ctx->data, ctx->dyn_indexes[index]); in ossl_lib_ctx_get_data()
416 CRYPTO_THREAD_unlock(ctx->lock); in ossl_lib_ctx_get_data()
420 CRYPTO_THREAD_unlock(ctx->index_locks[index]); in ossl_lib_ctx_get_data()
424 OSSL_EX_DATA_GLOBAL *ossl_lib_ctx_get_ex_data_global(OSSL_LIB_CTX *ctx) in ossl_lib_ctx_get_ex_data_global() argument
426 ctx = ossl_lib_ctx_get_concrete(ctx); in ossl_lib_ctx_get_ex_data_global()
427 if (ctx == NULL) in ossl_lib_ctx_get_ex_data_global()
429 return &ctx->global; in ossl_lib_ctx_get_ex_data_global()
432 int ossl_lib_ctx_run_once(OSSL_LIB_CTX *ctx, unsigned int idx, in ossl_lib_ctx_run_once() argument
437 ctx = ossl_lib_ctx_get_concrete(ctx); in ossl_lib_ctx_run_once()
438 if (ctx == NULL) in ossl_lib_ctx_run_once()
441 if (!CRYPTO_THREAD_read_lock(ctx->oncelock)) in ossl_lib_ctx_run_once()
443 done = ctx->run_once_done[idx]; in ossl_lib_ctx_run_once()
445 ret = ctx->run_once_ret[idx]; in ossl_lib_ctx_run_once()
446 CRYPTO_THREAD_unlock(ctx->oncelock); in ossl_lib_ctx_run_once()
451 if (!CRYPTO_THREAD_write_lock(ctx->oncelock)) in ossl_lib_ctx_run_once()
453 if (ctx->run_once_done[idx]) { in ossl_lib_ctx_run_once()
454 ret = ctx->run_once_ret[idx]; in ossl_lib_ctx_run_once()
455 CRYPTO_THREAD_unlock(ctx->oncelock); in ossl_lib_ctx_run_once()
459 ret = run_once_fn(ctx); in ossl_lib_ctx_run_once()
460 ctx->run_once_done[idx] = 1; in ossl_lib_ctx_run_once()
461 ctx->run_once_ret[idx] = ret; in ossl_lib_ctx_run_once()
462 CRYPTO_THREAD_unlock(ctx->oncelock); in ossl_lib_ctx_run_once()
467 int ossl_lib_ctx_onfree(OSSL_LIB_CTX *ctx, ossl_lib_ctx_onfree_fn onfreefn) in ossl_lib_ctx_onfree() argument
476 newonfree->next = ctx->onfreelist; in ossl_lib_ctx_onfree()
477 ctx->onfreelist = newonfree; in ossl_lib_ctx_onfree()