[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