diff --git a/daemon/ssrc.c b/daemon/ssrc.c index c1145920a..34bf41b5f 100644 --- a/daemon/ssrc.c +++ b/daemon/ssrc.c @@ -202,13 +202,17 @@ void ssrc_hash_foreach(struct ssrc_hash *sh, void (*f)(void *, void *), void *pt } -struct ssrc_hash *create_ssrc_hash_full(ssrc_create_func_t cfunc, void *uptr) { +struct ssrc_hash *create_ssrc_hash_full_fast(ssrc_create_func_t cfunc, void *uptr) { struct ssrc_hash *ret; ret = g_slice_alloc0(sizeof(*ret)); ret->ht = g_hash_table_new_full(uint32_hash, uint32_eq, NULL, ssrc_entry_put); rwlock_init(&ret->lock); ret->create_func = cfunc; ret->uptr = uptr; + return ret; +} +struct ssrc_hash *create_ssrc_hash_full(ssrc_create_func_t cfunc, void *uptr) { + struct ssrc_hash *ret = create_ssrc_hash_full_fast(cfunc, uptr); ret->precreat = cfunc(uptr); // because object creation might be slow return ret; } diff --git a/include/ssrc.h b/include/ssrc.h index 308fe3479..8a611307c 100644 --- a/include/ssrc.h +++ b/include/ssrc.h @@ -208,7 +208,8 @@ struct ssrc_xr_voip_metrics { void free_ssrc_hash(struct ssrc_hash **); void ssrc_hash_foreach(struct ssrc_hash *, void (*)(void *, void *), void *); -struct ssrc_hash *create_ssrc_hash_full(ssrc_create_func_t, void *uptr); +struct ssrc_hash *create_ssrc_hash_full(ssrc_create_func_t, void *uptr); // pre-creates one object +struct ssrc_hash *create_ssrc_hash_full_fast(ssrc_create_func_t, void *uptr); // doesn't pre-create object struct ssrc_hash *create_ssrc_hash_call(void);