summaryrefslogtreecommitdiff
path: root/res/res_rtp_asterisk.c
diff options
context:
space:
mode:
authorMatt Jordan <mjordan@digium.com>2015-10-06 20:43:58 -0500
committerMatt Jordan <mjordan@digium.com>2015-10-06 20:51:35 -0500
commitb714b2152d2ee2f6599e9decbe927d4215b6169d (patch)
tree52be15481ac724c2103f10d8cbe507e05884ee6a /res/res_rtp_asterisk.c
parentf939e2bd48598d721aa18af8182b7b6b91a9fe95 (diff)
res/res_rtp_asterisk: Fix assignment after ao2 decrement
When we decide we will no longer schedule an RTCP write, we remove the reference to the RTP instance, then assign -1 to the stored scheduler ID in case something else comes along and wants to see if anything is scheduled. That scheduler ID is on the RTP instance. After 60a9172d7ef2 was merged to fix the regression introduced by 3cf0f29310, this improper assignment on a potentially destroyed object started getting tripped on the build agents. Frankly, this should have been crashing a lot more often earlier. I can only assume that the timing was changed just enough by both changes to start actually hitting this problem. As it is, simply moving the assignment prior to the ao2 deference is sufficient to keep the RTP instance from being referenced when it is very, truly, aboslutely dead. (Note that it is still good practice to assign -1 to the scheduler ID when we know we won't be scheduling it again, as the ao2 deref *may* not always destroy the ao2 object.) ASTERISK-25449 Change-Id: Ie6d3cb4adc7b1a6c078b1c38c19fc84cf787cda7
Diffstat (limited to 'res/res_rtp_asterisk.c')
-rw-r--r--res/res_rtp_asterisk.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index fb6a5be1b..390fd085a 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -3199,8 +3199,8 @@ static int ast_rtcp_write(const void *data)
/*
* Not being rescheduled.
*/
- ao2_ref(instance, -1);
rtp->rtcp->schedid = -1;
+ ao2_ref(instance, -1);
}
return res;