diff --git a/main/named_locks.c b/main/named_locks.c index b977b553c6..5960483884 100644 --- a/main/named_locks.c +++ b/main/named_locks.c @@ -87,8 +87,8 @@ static void named_locks_shutdown(void) int ast_named_locks_init(void) { - named_locks = ao2_container_alloc_hash(0, 0, NAMED_LOCKS_BUCKETS, named_locks_hash, NULL, - named_locks_cmp); + named_locks = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, + NAMED_LOCKS_BUCKETS, named_locks_hash, NULL, named_locks_cmp); if (!named_locks) { return -1; } diff --git a/res/res_pjsip/location.c b/res/res_pjsip/location.c index 46278dd0c0..c0c4a1f15f 100644 --- a/res/res_pjsip/location.c +++ b/res/res_pjsip/location.c @@ -209,12 +209,12 @@ struct ao2_container *ast_sip_location_retrieve_aor_contacts(const struct ast_si struct ao2_container *contacts; struct ast_named_lock *lock; - lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_RWLOCK, "aor", ast_sorcery_object_get_id(aor)); + lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_MUTEX, "aor", ast_sorcery_object_get_id(aor)); if (!lock) { return NULL; } - ao2_wrlock(lock); + ao2_lock(lock); contacts = ast_sip_location_retrieve_aor_contacts_nolock(aor); ao2_unlock(lock); ast_named_lock_put(lock); @@ -368,12 +368,12 @@ int ast_sip_location_add_contact(struct ast_sip_aor *aor, const char *uri, int res; struct ast_named_lock *lock; - lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_RWLOCK, "aor", ast_sorcery_object_get_id(aor)); + lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_MUTEX, "aor", ast_sorcery_object_get_id(aor)); if (!lock) { return -1; } - ao2_wrlock(lock); + ao2_lock(lock); res = ast_sip_location_add_contact_nolock(aor, uri, expiration_time, path_info, user_agent, via_addr, via_port, call_id, endpoint); diff --git a/res/res_pjsip_registrar.c b/res/res_pjsip_registrar.c index a39dac676e..f99a3b84dd 100644 --- a/res/res_pjsip_registrar.c +++ b/res/res_pjsip_registrar.c @@ -525,12 +525,12 @@ static int register_aor(pjsip_rx_data *rdata, struct ao2_container *contacts = NULL; struct ast_named_lock *lock; - lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_RWLOCK, "aor", aor_name); + lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_MUTEX, "aor", aor_name); if (!lock) { return PJ_TRUE; } - ao2_wrlock(lock); + ao2_lock(lock); contacts = ast_sip_location_retrieve_aor_contacts_nolock(aor); if (!contacts) { ao2_unlock(lock); diff --git a/res/res_pjsip_registrar_expire.c b/res/res_pjsip_registrar_expire.c index 0d979a13f4..61841a0540 100644 --- a/res/res_pjsip_registrar_expire.c +++ b/res/res_pjsip_registrar_expire.c @@ -44,7 +44,7 @@ static int expire_contact(void *obj, void *arg, int flags) struct ast_sip_contact *contact = obj; struct ast_named_lock *lock; - lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_RWLOCK, "aor", contact->aor); + lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_MUTEX, "aor", contact->aor); if (!lock) { return 0; } @@ -53,7 +53,7 @@ static int expire_contact(void *obj, void *arg, int flags) * We need to check the expiration again with the aor lock held * in case another thread is attempting to renew the contact. */ - ao2_wrlock(lock); + ao2_lock(lock); if (ast_tvdiff_ms(ast_tvnow(), contact->expiration_time) > 0) { ast_sip_location_delete_contact(contact); }