Bug#493055: BRIStuff patches introduce deadlock
Kevin Shanahan
kmshanah at disenchant.net
Sun Sep 28 11:27:20 UTC 2008
On Sun, Sep 28, 2008 at 08:19:57PM +0930, Kevin Shanahan wrote:
> Well it looked promising, but no - the lockup still appears to be
> reproducable. The patch I used to test is attached. Let me know if I
> made any mistake in backporting it (it should apply cleanly as the
> last patch in the debian/patches/series file).
Ugh, sorry - forgot to attach the patch.
-------------- next part --------------
Locking fixes in chan_zap: lock chan before pvt
Taken from http://repo.or.cz/w/asterisk-bristuff.git?a=commit;h=6e44531a8a112e36588b5dbced309b0521d6b64e
diff -urNp a/channels/chan_zap.c b/channels/chan_zap.c
--- a/channels/chan_zap.c 2008-09-28 19:33:09.000000000 +0930
+++ b/channels/chan_zap.c 2008-09-28 19:37:27.000000000 +0930
@@ -8851,7 +8851,7 @@ static void *pri_dchannel(void *vpri)
int haveidles;
int activeidles;
int nextidle = -1;
- struct ast_channel *c;
+ struct ast_channel *c = NULL;
struct timeval tv, lowest, *next;
struct timeval lastidle = { 0, 0 };
int doidling=0;
@@ -9539,6 +9539,7 @@ static void *pri_dchannel(void *vpri)
if (e->ring.redirectingreason >= 0)
pbx_builtin_setvar_helper(c, "PRIREDIRECTREASON", redirectingreason2str(e->ring.redirectingreason));
+ ast_muted_lock(&c->lock);
ast_mutex_lock(&pri->pvts[chanpos]->lock);
ast_mutex_lock(&pri->lock);
@@ -9637,6 +9638,8 @@ static void *pri_dchannel(void *vpri)
if (crv)
ast_mutex_unlock(&crv->lock);
ast_mutex_unlock(&pri->pvts[chanpos]->lock);
+ if (c)
+ ast_mutex_unlock(&c->lock);
} else {
if (e->ring.flexible)
pri_hangup(pri->pri, e->ring.call, PRI_CAUSE_NORMAL_CIRCUIT_CONGESTION, -1);
More information about the Pkg-voip-maintainers
mailing list