]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_stasis_device_state: Unsubscribe should remove old subscriptions
authorSergej Kasumovic <sergej@bicomsystems.com>
Thu, 20 Jul 2017 13:08:05 +0000 (15:08 +0200)
committerSergej Kasumovic <sergej@bicomsystems.com>
Tue, 25 Jul 2017 12:55:41 +0000 (14:55 +0200)
Case scenario with Applications ARI:

* Once you subscribe to deviceState with Applications REST API, it will be
added into subscription pool.

* When you unsubscribe it will remove from the device_state_subscription
hash table but not from the subscription pool.

* When you subscribe again, it will add it to pool again.

* Now you will have two subscriptions and you will receive same event
twice.

This fix should now remove deviceState subscription from pool and it
should fix unsubscribe on deviceState.

ASTERISK-27130 #close

Change-Id: I718b70d770a086e39b4ddba4f69a3c616d4476c4

res/res_stasis_device_state.c

index 29e75660cf7bb013d2f98adf67bc596631b45db9..51101dd7b7daa769f7e5f4e10028239d83d277b9 100644 (file)
@@ -108,7 +108,6 @@ static int device_state_subscriptions_cmp(void *obj, void *arg, int flags)
 static void device_state_subscription_destroy(void *obj)
 {
        struct device_state_subscription *sub = obj;
-       sub->sub = stasis_unsubscribe_and_join(sub->sub);
        ast_string_field_free_memory(sub);
 }
 
@@ -154,6 +153,9 @@ static struct device_state_subscription *find_device_state_subscription(
 static void remove_device_state_subscription(
        struct device_state_subscription *sub)
 {
+       if (sub->sub) {
+               sub->sub = stasis_unsubscribe_and_join(sub->sub);
+       }
        ao2_unlink_flags(device_state_subscriptions, sub, OBJ_NOLOCK);
 }