diff options
author | Joshua Colp <jcolp@digium.com> | 2016-02-04 12:35:52 -0600 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2016-02-04 12:35:52 -0600 |
commit | 6cac364284ce33566201070c06e0a26ef82de962 (patch) | |
tree | c2bbbae221102f38df04328f23daeadb3ddb3778 /res | |
parent | 014fc9ef65f923fb44a20b101700d851f2cc964d (diff) | |
parent | 23829b325377ae32f78cef81a48cc4318a7206b9 (diff) |
Merge "res_stasis_device_state: Fix refcounting error." into 13
Diffstat (limited to 'res')
-rw-r--r-- | res/res_stasis_device_state.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/res/res_stasis_device_state.c b/res/res_stasis_device_state.c index c0b6859ca..be082dcc8 100644 --- a/res/res_stasis_device_state.c +++ b/res/res_stasis_device_state.c @@ -303,6 +303,12 @@ static void device_state_cb(void *data, struct stasis_subscription *sub, { struct ast_device_state_message *device_state; + if (stasis_subscription_final_message(sub, msg)) { + /* Remove stasis subscription's reference to device_state_subscription */ + ao2_ref(data, -1); + return; + } + if (ast_device_state_message_type() != stasis_message_type(msg)) { return; } @@ -365,10 +371,12 @@ static int subscribe_device_state(struct stasis_app *app, void *obj) ast_debug(3, "Subscribing to device %s\n", sub->device_name); - sub->sub = stasis_subscribe_pool(topic, device_state_cb, sub); + sub->sub = stasis_subscribe_pool(topic, device_state_cb, ao2_bump(sub)); if (!sub->sub) { ast_log(LOG_ERROR, "Unable to subscribe to device %s\n", sub->device_name); + /* Reference we added when attempting to stasis_subscribe_pool */ + ao2_ref(sub, -1); return -1; } |