[asterisk-commits] mmichelson: branch mmichelson/rls-notify r418165 - /team/mmichelson/rls-notif...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Jul 7 19:20:45 CDT 2014


Author: mmichelson
Date: Mon Jul  7 19:20:40 2014
New Revision: 418165

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=418165
Log:
Fix subscription state during subscription termination.

Error spotted by the unsubscribe testsuite test.


Modified:
    team/mmichelson/rls-notify/res/res_pjsip_pubsub.c

Modified: team/mmichelson/rls-notify/res/res_pjsip_pubsub.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/rls-notify/res/res_pjsip_pubsub.c?view=diff&rev=418165&r1=418164&r2=418165
==============================================================================
--- team/mmichelson/rls-notify/res/res_pjsip_pubsub.c (original)
+++ team/mmichelson/rls-notify/res/res_pjsip_pubsub.c Mon Jul  7 19:20:40 2014
@@ -2472,6 +2472,16 @@
 	pjsip_evsub_set_mod_data(evsub, pubsub_module.id, NULL);
 }
 
+static void set_state_terminated(struct ast_sip_subscription *sub)
+{
+	int i;
+
+	sub->subscription_state = PJSIP_EVSUB_STATE_TERMINATED;
+	for (i = 0; i < AST_VECTOR_SIZE(&sub->children); ++i) {
+		set_state_terminated(AST_VECTOR_GET(&sub->children, i));
+	}
+}
+
 static void pubsub_on_rx_refresh(pjsip_evsub *evsub, pjsip_rx_data *rdata,
 		int *p_st_code, pj_str_t **p_st_text, pjsip_hdr *res_hdr, pjsip_msg_body **p_body)
 {
@@ -2480,6 +2490,10 @@
 	sub_tree = pjsip_evsub_get_mod_data(evsub, pubsub_module.id);
 	if (!sub_tree) {
 		return;
+	}
+
+	if (pjsip_evsub_get_state(evsub) == PJSIP_EVSUB_STATE_TERMINATED) {
+		set_state_terminated(sub_tree->root);
 	}
 
 	if (send_notify(sub_tree)) {
@@ -2525,16 +2539,6 @@
 
 	ao2_ref(sub_tree, +1);
 	ast_sip_push_task(sub_tree->serializer, serialized_pubsub_on_client_refresh, sub_tree);
-}
-
-static void set_state_terminated(struct ast_sip_subscription *sub)
-{
-	int i;
-
-	sub->subscription_state = PJSIP_EVSUB_STATE_TERMINATED;
-	for (i = 0; i < AST_VECTOR_SIZE(&sub->children); ++i) {
-		set_state_terminated(AST_VECTOR_GET(&sub->children, i));
-	}
 }
 
 static int serialized_pubsub_on_server_timeout(void *userdata)




More information about the asterisk-commits mailing list