pjsip_options.c: Fix race condition stopping periodic out of dialog OPTIONS request.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 24 Sep 2014 18:35:47 +0000 (18:35 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 24 Sep 2014 18:35:47 +0000 (18:35 +0000)
commit68077634feda3df2c6e529d9707c0d161edb7171
treeb888b7b63ef4473a83f204cff5b6f9d4cf7ad121
parent39fada4dc9de141c46d4cdc5c8fdebce21e9ab4f
pjsip_options.c: Fix race condition stopping periodic out of dialog OPTIONS request.

The crash on the issues is a result of an invalid transport configuration
change when asterisk is restarted.  The attempt to send the qualify
request fails and we cleaned up.  However, the callback is also called
which results in a double unref of the objects involved.

* Put a wrapper around pjsip_endpt_send_request() to detect when the
passed in callback is called because of an error so callers can know to
not cleanup.

* Made send_request_cb() able to handle repeated challenges (Up to 10).

* Fix periodic endpoint qualify OPTIONS sched deletion race by avoiding
it.  The sched entry will no longer self stop and must be externally
stopped.

* Added REF_DEBUG description tags to struct sched_data in
pjsip_options.c.

* Fix some off-nominal ref leaks in schedule_qualify(),
qualify_and_schedule().

* Reordered pjsip_options.c module start/stop code to cleanup better on
error.

ASTERISK-24295 #close
Reported by: Rogger Padilla

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

Merged revisions 423866 from http://svn.asterisk.org/svn/asterisk/branches/12
........

Merged revisions 423867 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
res/res_pjsip.c
res/res_pjsip/pjsip_options.c