[OpenSIPS-Devel] [OpenSIPS/opensips] ad6aef: dialog: Change dlg->vals locking to be independent
Liviu Chircu
noreply at github.com
Mon Jun 26 07:36:56 UTC 2023
Branch: refs/heads/master
Home: https://github.com/OpenSIPS/opensips
Commit: ad6aef0291bf7b81c361de8a19c78de2435e49de
https://github.com/OpenSIPS/opensips/commit/ad6aef0291bf7b81c361de8a19c78de2435e49de
Author: Liviu Chircu <liviu at opensips.org>
Date: 2023-06-26 (Mon, 26 Jun 2023)
Changed paths:
M modules/dialog/dialog.c
M modules/dialog/dlg_db_handler.c
M modules/dialog/dlg_db_handler.h
M modules/dialog/dlg_hash.c
M modules/dialog/dlg_hash.h
M modules/dialog/dlg_replication.c
M modules/dialog/dlg_vals.c
M modules/dialog/dlg_vals.h
Log Message:
-----------
dialog: Change dlg->vals locking to be independent
By making the dlg->vals locking independent from the dialog hash lock,
working with the dialog API will become less prone to AB/BA deadlocks.
Sample possible AB/BA deadlock which is now naturally avoided:
* module "X" timer grabs lock-A, then gets stuck trying to grab
lock-B(dialog bucket) through some innocent .store_dlg_val()
dialog API call
* dialog DB timer had grabbed lock-B(dialog bucket), and is now stuck
grabbing lock-A while running a DLGCB_DESTROYED callback
installed by module "X"
More information about the Devel
mailing list