aboutsummaryrefslogtreecommitdiffstats
path: root/rtp.c
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-31 15:24:05 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-31 15:24:05 +0000
commitda7bf0433e8016326a545879f3a27a101722e093 (patch)
tree4db2064fa4d591c889196b917eca5ff245d73571 /rtp.c
parent5c6752142de00ace06564115d7bc96fed7eb724b (diff)
Poking at a structure when it may not even be allocated is not healthy. Essentially make sure an RTCP structure exists before trying to delete it's scheduled item. (issue #7514 reported by jmls fixed by AuPix)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@38573 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'rtp.c')
-rw-r--r--rtp.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/rtp.c b/rtp.c
index 67e5952bb..373eb102d 100644
--- a/rtp.c
+++ b/rtp.c
@@ -1041,7 +1041,7 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp)
rtp->seedrxseqno = seqno;
}
- if (rtp->rtcp->schedid < 1) {
+ if (rtp->rtcp && rtp->rtcp->schedid < 1) {
/* Schedule transmission of Receiver Report */
rtp->rtcp->schedid = ast_sched_add(rtp->sched, ast_rtcp_calc_interval(rtp), ast_rtcp_write, rtp);
}
@@ -1755,7 +1755,7 @@ void ast_rtp_get_us(struct ast_rtp *rtp, struct sockaddr_in *us)
void ast_rtp_stop(struct ast_rtp *rtp)
{
- if (rtp->rtcp->schedid > 0) {
+ if (rtp->rtcp && rtp->rtcp->schedid > 0) {
ast_sched_del(rtp->sched, rtp->rtcp->schedid);
rtp->rtcp->schedid = -1;
}
@@ -1827,11 +1827,6 @@ void ast_rtp_destroy(struct ast_rtp *rtp)
ast_verbose(" RTT: %f\n", rtp->rtcp->rtt);
}
- if (rtp->rtcp->schedid > 0) {
- ast_sched_del(rtp->sched, rtp->rtcp->schedid);
- rtp->rtcp->schedid = -1;
- }
-
if (rtp->smoother)
ast_smoother_free(rtp->smoother);
if (rtp->ioid)
@@ -1839,6 +1834,8 @@ void ast_rtp_destroy(struct ast_rtp *rtp)
if (rtp->s > -1)
close(rtp->s);
if (rtp->rtcp) {
+ if (rtp->rtcp->schedid > 0)
+ ast_sched_del(rtp->sched, rtp->rtcp->schedid);
close(rtp->rtcp->s);
free(rtp->rtcp);
rtp->rtcp=NULL;
@@ -2294,7 +2291,7 @@ static int ast_rtp_raw_write(struct ast_rtp *rtp, struct ast_frame *f, int codec
rtp->txcount++;
rtp->txoctetcount +=(res - hdrlen);
- if (rtp->rtcp->schedid < 1)
+ if (rtp->rtcp && rtp->rtcp->schedid < 1)
rtp->rtcp->schedid = ast_sched_add(rtp->sched, ast_rtcp_calc_interval(rtp), ast_rtcp_write, rtp);
}