summaryrefslogtreecommitdiff
path: root/bridges
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2013-09-27 14:35:12 +0000
committerMark Michelson <mmichelson@digium.com>2013-09-27 14:35:12 +0000
commit212b6f668bc4a140adc56eac6aeebd4f9207dc1e (patch)
tree4bceac98cdd55f1014e32bfb201aa053ffb3d74d /bridges
parentb22612110ccbf3cacdc422c996bf94909085e927 (diff)
Fix refleaks of ast_rtp_instance structures.
These refleaks were causing bridged calls not to close their RTP ports. Thus a call would leave open 4 ports (RTP for party A, RTCP for party A, RTP for party B, and RTCP for party B). This led to an eventual depletion of available RTP ports. ........ Merged revisions 399924 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@399925 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'bridges')
-rw-r--r--bridges/bridge_native_rtp.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/bridges/bridge_native_rtp.c b/bridges/bridge_native_rtp.c
index f97c626aa..c8bf880b6 100644
--- a/bridges/bridge_native_rtp.c
+++ b/bridges/bridge_native_rtp.c
@@ -118,8 +118,12 @@ static int native_rtp_bridge_start(struct ast_bridge *bridge, struct ast_channel
struct ast_bridge_channel *c1 = AST_LIST_LAST(&bridge->channels);
enum ast_rtp_glue_result native_type;
struct ast_rtp_glue *glue0, *glue1;
- struct ast_rtp_instance *instance0 = NULL, *instance1 = NULL, *vinstance0 = NULL;
- struct ast_rtp_instance *vinstance1 = NULL, *tinstance0 = NULL, *tinstance1 = NULL;
+ RAII_VAR(struct ast_rtp_instance *, instance0, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, instance1, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, vinstance0, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, vinstance1, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, tinstance0, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, tinstance1, NULL, ao2_cleanup);
RAII_VAR(struct ast_format_cap *, cap0, ast_format_cap_alloc_nolock(), ast_format_cap_destroy);
RAII_VAR(struct ast_format_cap *, cap1, ast_format_cap_alloc_nolock(), ast_format_cap_destroy);
@@ -185,7 +189,10 @@ static void native_rtp_bridge_stop(struct ast_bridge *bridge, struct ast_channel
struct ast_bridge_channel *c1 = AST_LIST_LAST(&bridge->channels);
enum ast_rtp_glue_result native_type;
struct ast_rtp_glue *glue0, *glue1 = NULL;
- struct ast_rtp_instance *instance0 = NULL, *instance1 = NULL, *vinstance0 = NULL, *vinstance1 = NULL;
+ RAII_VAR(struct ast_rtp_instance *, instance0, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, instance1, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, vinstance0, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_rtp_instance *, vinstance1, NULL, ao2_cleanup);
if (c0 == c1) {
return;