diff options
Diffstat (limited to 'channels/sig_pri.c')
-rw-r--r-- | channels/sig_pri.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/channels/sig_pri.c b/channels/sig_pri.c index e76db86ac..308fa5dc8 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -321,6 +321,16 @@ static void sig_pri_lock_private(struct sig_pri_chan *p) p->calls->lock_private(p->chan_pvt); } +static void sig_pri_deadlock_avoidance_private(struct sig_pri_chan *p) +{ + if (p->calls->deadlock_avoidance_private) { + p->calls->deadlock_avoidance_private(p->chan_pvt); + } else { + /* Fallback to the old way if callback not present. */ + PRI_DEADLOCK_AVOIDANCE(p); + } +} + static inline int pri_grab(struct sig_pri_chan *p, struct sig_pri_span *pri) { int res; @@ -328,7 +338,7 @@ static inline int pri_grab(struct sig_pri_chan *p, struct sig_pri_span *pri) do { res = ast_mutex_trylock(&pri->lock); if (res) { - PRI_DEADLOCK_AVOIDANCE(p); + sig_pri_deadlock_avoidance_private(p); } } while (res); /* Then break the poll */ @@ -1123,7 +1133,7 @@ static void sig_pri_lock_owner(struct sig_pri_span *pri, int chanpos) } /* We must unlock the PRI to avoid the possibility of a deadlock */ ast_mutex_unlock(&pri->lock); - PRI_DEADLOCK_AVOIDANCE(pri->pvts[chanpos]); + sig_pri_deadlock_avoidance_private(pri->pvts[chanpos]); ast_mutex_lock(&pri->lock); } } |