chan_sip.c: Fix registration timeout and expire deadlock potential.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 10 Mar 2016 23:01:12 +0000 (17:01 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 16 Mar 2016 19:44:52 +0000 (14:44 -0500)
commit72c444ba37b63b17563c2ac55b3ff1edbcacdd9a
treefa7f72fcc0a5ec48a53f1a50523e743b371b6687
parentfbf8e04aed120930bca370fb41a40e4eac7dd134
chan_sip.c: Fix registration timeout and expire 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.

ASTERISK-25023

Change-Id: I2e40de89efc8ae6e8850771d089ca44bc604b508
channels/chan_sip.c
channels/sip/include/sip.h