]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
pjsip_options: Fix continued qualifies after endpoint/aor deletion
authorGeorge Joseph <george.joseph@fairview5.com>
Tue, 23 Dec 2014 23:19:30 +0000 (23:19 +0000)
committerGeorge Joseph <george.joseph@fairview5.com>
Tue, 23 Dec 2014 23:19:30 +0000 (23:19 +0000)
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

index f64c83f381e019ca4ce258f5e7ac3954dd54dcea..1c3c9347eeccc3469e30b9b16730c1967f5648d6 100644 (file)
@@ -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;
        }