summaryrefslogtreecommitdiff
path: root/res/res_pjsip_pubsub.c
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2016-01-25 16:51:25 -0600
committerMark Michelson <mmichelson@digium.com>2016-01-25 16:58:39 -0600
commitb073244c511f9634de57ea401ab9dbebcf2390e8 (patch)
tree08e955e27dd9d1807219c10d1e425d811ff90fa4 /res/res_pjsip_pubsub.c
parent830f8933c29f36484e7a106c9c92446bab6a555c (diff)
res_pjsip_pubsub: Prevent crash from AMI command on freed subscription.
A test recently uncovered that running an ill-timed AMI command to show inbound subscriptions could cause a crash since Asterisk will try to operate on a freed subscription. The fix for this is to remove the subscription tree from the list of subscriptions at the time that we are sending our final NOTIFY request out. This way, as the subscription is in the process of dying, it is inaccessible from AMI. Change-Id: Ic0239003d8d73e04c47c12dd2a7e23867e5b5b23
Diffstat (limited to 'res/res_pjsip_pubsub.c')
-rw-r--r--res/res_pjsip_pubsub.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/res/res_pjsip_pubsub.c b/res/res_pjsip_pubsub.c
index a703e29a1..dc7f5ed9e 100644
--- a/res/res_pjsip_pubsub.c
+++ b/res/res_pjsip_pubsub.c
@@ -1202,8 +1202,6 @@ static void subscription_tree_destructor(void *obj)
ast_debug(3, "Destroying subscription tree %p\n", sub_tree);
- remove_subscription(sub_tree);
-
ao2_cleanup(sub_tree->endpoint);
destroy_subscriptions(sub_tree->root);
@@ -3295,6 +3293,7 @@ static void pubsub_on_evsub_state(pjsip_evsub *evsub, pjsip_event *event)
}
}
+ remove_subscription(sub_tree);
pjsip_evsub_set_mod_data(evsub, pubsub_module.id, NULL);
sub_tree->evsub = NULL;
ast_sip_dialog_set_serializer(sub_tree->dlg, NULL);