Merged revisions 270866 via svnmerge from
authorDavid Vossel <dvossel@digium.com>
Wed, 16 Jun 2010 17:36:51 +0000 (17:36 +0000)
committerDavid Vossel <dvossel@digium.com>
Wed, 16 Jun 2010 17:36:51 +0000 (17:36 +0000)
commit1da8159aa6b190d420be5711eb8563886c65c68a
treea19e2db858acbf4497bb47348e3f03a245380bc2
parent00433d60e61dbe60e7cba8912787dd09b15ea119
Merged revisions 270866 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r270866 | dvossel | 2010-06-16 12:35:29 -0500 (Wed, 16 Jun 2010) | 22 lines

  fixes chan_iax2 race condition

  There is code in chan_iax2.c that attempts to guarantee that only a single
  active thread will handle a call number at a time.  This code works once
  the thread is added to an active_list of threads, but we are not currently
  guaranteed that a newly activated thread will enter the active_list immediately
  because it is left up to the thread to add itself after frames have been
  queued to it.  This means that if two frames come in for the same call number
  at the same time, it is possible for them to grab two separate threads because
  the first thread did not add itself to the active_list fast enough.  This
  causes some pretty complex problems.

  This patch resolves this race condition by immediately adding an activated
  thread to the active_list within the network thread and only depending on
  the thread to remove itself once it is done processing the frames queued to
  it.  By doing this we are guaranteed that if another frame for the same call
  number comes in at the same time, that this thread will immediately be found
  in the active_list of threads.

  Review: https://reviewboard.asterisk.org/r/720/
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@270867 65c4cc65-6c06-0410-ace0-fbb531ad65f3
channels/chan_iax2.c