From 7ea4156a5e3540465fd028514cb52fde290f33d2 Mon Sep 17 00:00:00 2001 From: George Joseph Date: Tue, 23 Dec 2014 23:19:30 +0000 Subject: pjsip_options: Fix continued qualifies after endpoint/aor deletion If you remove an endpoint/aor from pjsip.conf then do a core reload, qualifies will continue even though the object are gone. This happens because nothing clears out the qualify tasks. This patch unschedules all existing qualify tasks before scheduling new ones on reload. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4290/ ........ Merged revisions 430064 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430067 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_pjsip/pjsip_options.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'res/res_pjsip/pjsip_options.c') diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c index f64c83f38..1c3c9347e 100644 --- a/res/res_pjsip/pjsip_options.c +++ b/res/res_pjsip/pjsip_options.c @@ -1006,10 +1006,25 @@ static int qualify_and_schedule_all_cb(void *obj, void *arg, int flags) return 0; } +/*! + * \internal + * \brief Unschedule all existing contacts + */ +static int unschedule_all_cb(void *obj, void *arg, int flags) +{ + struct sched_data *data = obj; + + AST_SCHED_DEL_UNREF(sched, data->id, ao2_ref(data, -1)); + + return CMP_MATCH; +} + static void qualify_and_schedule_all(void) { struct ao2_container *endpoints = ast_sip_get_endpoints(); + ao2_callback(sched_qualifies, OBJ_NODATA | OBJ_MULTIPLE | OBJ_UNLINK, unschedule_all_cb, NULL); + if (!endpoints) { return; } -- cgit v1.2.3