]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Added deadlock protection to try_suggested_sip_codec in chan_sip.c.
authorMatthew Nicholson <mnicholson@digium.com>
Fri, 19 Jun 2009 21:21:15 +0000 (21:21 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Fri, 19 Jun 2009 21:21:15 +0000 (21:21 +0000)
Review: https://reviewboard.asterisk.org/r/287/

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@202022 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 78709e422e8a8481bbcbe4a31af21672a84a7d47..3999abba0d93932e82609aac873937a99fd98257 100644 (file)
@@ -3729,8 +3729,20 @@ static void try_suggested_sip_codec(struct sip_pvt *p)
        int fmt;
        const char *codec;
 
-       codec = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC");
-       if (!codec) 
+       while (p->owner && ast_channel_trylock(p->owner)) {
+               sip_pvt_unlock(p);
+               sched_yield();
+               sip_pvt_lock(p);
+       }
+
+       if (!p->owner)
+               return;
+
+       codec = ast_strdupa(S_OR(pbx_builtin_getvar_helper(p->owner, "SIP_CODEC"), ""));
+
+       ast_channel_unlock(p->owner);
+
+       if (ast_strlen_zero(codec))
                return;
 
        fmt = ast_getformatbyname(codec);