mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-22 12:52:33 +00:00
Add private lock deadlock avoidance callback to PRI and SS7.
Factor out the equivalent function for analog. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@313100 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -518,23 +518,31 @@ static void analog_all_subchannels_hungup(struct analog_pvt *p)
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void analog_unlock_private(struct analog_pvt *p)
|
||||
{
|
||||
if (p->calls->unlock_private) {
|
||||
p->calls->unlock_private(p->chan_pvt);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static void analog_lock_private(struct analog_pvt *p)
|
||||
{
|
||||
if (p->calls->lock_private) {
|
||||
p->calls->lock_private(p->chan_pvt);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void analog_deadlock_avoidance_private(struct analog_pvt *p)
|
||||
{
|
||||
if (p->calls->deadlock_avoidance_private) {
|
||||
p->calls->deadlock_avoidance_private(p->chan_pvt);
|
||||
} else {
|
||||
/* Fallback to manual avoidance if callback not present. */
|
||||
analog_unlock_private(p);
|
||||
usleep(1);
|
||||
analog_lock_private(p);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
@@ -563,12 +571,7 @@ static void analog_lock_sub_owner(struct analog_pvt *pvt, enum analog_sub sub_id
|
||||
break;
|
||||
}
|
||||
/* We must unlock the private to avoid the possibility of a deadlock */
|
||||
if (pvt->calls->deadlock_avoidance_private) {
|
||||
pvt->calls->deadlock_avoidance_private(pvt->chan_pvt);
|
||||
} else {
|
||||
/* Don't use 100% CPU if required callback not present. */
|
||||
usleep(1);
|
||||
}
|
||||
analog_deadlock_avoidance_private(pvt);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user