chan_sip.c: Fix waitid deadlock potential.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 9 Mar 2016 22:26:26 +0000 (16:26 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 16 Mar 2016 19:44:51 +0000 (14:44 -0500)
commit7ea1e181dc7c3540c9af0c3bd6d0915260c570d8
treef1ef8fd7a1e1486844bf5ab87198b1540d756a64
parent02458cc6fdc76c3782e2d657f7d11bd866513efd
chan_sip.c: Fix waitid deadlock potential.

This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

* Made always run check_pendings() under the scheduler thread so scheduler
ids can be checked safely.

ASTERISK-25023

Change-Id: Ia834d6edd5bdb47c163e4ecf884428a4a8b17d52
channels/chan_sip.c