]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 190287 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Thu, 23 Apr 2009 19:17:36 +0000 (19:17 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 23 Apr 2009 19:17:36 +0000 (19:17 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r190287 | file | 2009-04-23 16:15:30 -0300 (Thu, 23 Apr 2009) | 13 lines

  Merged revisions 190286 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r190286 | file | 2009-04-23 16:13:18 -0300 (Thu, 23 Apr 2009) | 6 lines

    Fix a bug in chan_local glare hangup detection.

    If both sides of a Local channel were hung up at around the same time it was
    possible for one thread to destroy the local private structure and have the other thread
    immediately try to remove the already freed structure from the local channel list.
  ........
................

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

channels/chan_local.c

index 936264d21e8fbcc551daeecc655a65f6d88192ab..9642038cb5dbd6ac817138cdf285887b58cc4494 100644 (file)
@@ -620,13 +620,10 @@ static int local_hangup(struct ast_channel *ast)
                   let local_queue do it. */
                if (glaredetect)
                        ast_set_flag(p, LOCAL_CANCEL_QUEUE);
-               ast_mutex_unlock(&p->lock);
                /* Remove from list */
                AST_LIST_LOCK(&locals);
                AST_LIST_REMOVE(&locals, p, list);
                AST_LIST_UNLOCK(&locals);
-               /* Grab / release lock just in case */
-               ast_mutex_lock(&p->lock);
                ast_mutex_unlock(&p->lock);
                /* And destroy */
                if (!glaredetect) {