summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2017-01-10 17:39:02 -0600
committerRichard Mudgett <rmudgett@digium.com>2017-01-25 13:44:26 -0600
commitc54f9d2bf01ab943c122c5326da52decf6e492cd (patch)
treedf9126ab980be0f7c5fcb99839784346ba42418b /main
parente51193bf720647b7b12fc33405b01470699f3c48 (diff)
T.140: Fix format ref and memory leaks.
* channel.c:ast_sendtext(): Fix T.140 SendText memory leak. * format_compatibility.c: T.140 RED and T.140 were swapped. * res_rtp_asterisk.c:rtp_red_init(): Fix ast_format_t140_red ref leak. * res_rtp_asterisk.c:rtp_red_init(): Fix data race after starting periodic scheduled red_write(). * res_rtp_asterisk.c: Some other minor misc tweaks. Change-Id: Ifa27a2e0f8a966b1cf628607c86fc4374b0b88cb
Diffstat (limited to 'main')
-rw-r--r--main/channel.c10
-rw-r--r--main/format_compatibility.c4
2 files changed, 8 insertions, 6 deletions
diff --git a/main/channel.c b/main/channel.c
index 637488a9c..f305cc8bb 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4889,16 +4889,18 @@ int ast_sendtext(struct ast_channel *chan, const char *text)
if (ast_channel_tech(chan)->write_text && (ast_format_cap_has_type(ast_channel_nativeformats(chan), AST_MEDIA_TYPE_TEXT))) {
struct ast_frame f;
+ memset(&f, 0, sizeof(f));
f.frametype = AST_FRAME_TEXT;
f.src = "DIALPLAN";
f.mallocd = AST_MALLOCD_DATA;
f.datalen = strlen(text);
f.data.ptr = ast_strdup(text);
- f.offset = 0;
- f.seqno = 0;
-
f.subclass.format = ast_format_t140;
- res = ast_channel_tech(chan)->write_text(chan, &f);
+
+ if (f.data.ptr) {
+ res = ast_channel_tech(chan)->write_text(chan, &f);
+ ast_frfree(&f);
+ }
} else if (ast_channel_tech(chan)->send_text) {
res = ast_channel_tech(chan)->send_text(chan, text);
}
diff --git a/main/format_compatibility.c b/main/format_compatibility.c
index cf66af282..0f1dff7c8 100644
--- a/main/format_compatibility.c
+++ b/main/format_compatibility.c
@@ -264,10 +264,10 @@ struct ast_format *ast_format_compatibility_bitfield2format(uint64_t bitfield)
/*! T.140 RED Text format RFC 4103 */
case AST_FORMAT_T140_RED:
- return ast_format_t140;
+ return ast_format_t140_red;
/*! T.140 Text format - ITU T.140, RFC 4103 */
case AST_FORMAT_T140:
- return ast_format_t140_red;
+ return ast_format_t140;
}
return NULL;
}