Fix a race condition with the IAX scheduler thread. A lock and condition are
commitb19d8526f4993415e7d1c435f896c34ca7e5d803
authorrussell <russell@614ede4d-c843-0410-af14-a771ab80d22e>
Tue, 26 Aug 2008 15:27:23 +0000 (26 15:27 +0000)
committerrussell <russell@614ede4d-c843-0410-af14-a771ab80d22e>
Tue, 26 Aug 2008 15:27:23 +0000 (26 15:27 +0000)
tree6c49b0df66aa95c1fd348fe96f26d77a3f1ca478
parent8f75e5cb5e69cd8f81a265f78679668e8196a877
Fix a race condition with the IAX scheduler thread.  A lock and condition are
used here to allow newly scheduled tasks to wake up the scheduler just in case
the new task needs to run sooner than the current wakeup time when the thread
is sleeping.  However, there was a race condition such that a newly scheduled
task would not properly wake up the scheduler or affect the wake up period.
The order of execution would have been:

  1) Scheduler thread determines wake up time of N ms.
  2) Another thread schedules a task and signals the condition, with an
     execution time of < N ms.
  3) Scheduler thread locks and goes to sleep for N ms.

By moving the sleep time determination to inside the critical section, this
possibility is avoided.

git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@140051 614ede4d-c843-0410-af14-a771ab80d22e
channels/chan_iax2.c