[Asterisk-code-review] channel.c: Fix off nominal channel allocation failure path. (asterisk[13])

Richard Mudgett asteriskteam at digium.com
Tue May 22 17:35:35 CDT 2018


Richard Mudgett has uploaded this change for review. ( https://gerrit.asterisk.org/9034


Change subject: channel.c: Fix off nominal channel allocation failure path.
......................................................................

channel.c: Fix off nominal channel allocation failure path.

__ast_channel_alloc_ap() had a failure exit path that hadn't setup the fd
descriptors to -1 yet.  The destructor would then attempt to close these
fd's that had never been opened.

Change-Id: Icf21093f36c60781e8cf6ee9d586536302af33e3
---
M main/channel.c
1 file changed, 14 insertions(+), 13 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/34/9034/1

diff --git a/main/channel.c b/main/channel.c
index cbcf134..8de7ad2 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -818,7 +818,20 @@
 
 	ast_channel_stage_snapshot(tmp);
 
-	if (!(nativeformats = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {
+	/*
+	 * Init file descriptors to unopened state so
+	 * the destructor can know not to close them.
+	 */
+	ast_channel_timingfd_set(tmp, -1);
+	ast_channel_internal_alertpipe_clear(tmp);
+	ast_channel_internal_fd_clear_all(tmp);
+
+#ifdef HAVE_EPOLL
+	ast_channel_epfd_set(tmp, epoll_create(25));
+#endif
+
+	nativeformats = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
+	if (!nativeformats) {
 		/*
 		 * Aborting the channel creation.  We do not need to complete staging
 		 * the channel snapshot because the channel has not been finalized or
@@ -835,18 +848,6 @@
 	ast_channel_set_rawreadformat(tmp, ast_format_none);
 	ast_channel_set_writeformat(tmp, ast_format_none);
 	ast_channel_set_readformat(tmp, ast_format_none);
-
-	/*
-	 * Init file descriptors to unopened state so
-	 * the destructor can know not to close them.
-	 */
-	ast_channel_timingfd_set(tmp, -1);
-	ast_channel_internal_alertpipe_clear(tmp);
-	ast_channel_internal_fd_clear_all(tmp);
-
-#ifdef HAVE_EPOLL
-	ast_channel_epfd_set(tmp, epoll_create(25));
-#endif
 
 	if (!(schedctx = ast_sched_context_create())) {
 		ast_log(LOG_WARNING, "Channel allocation failed: Unable to create schedule context\n");

-- 
To view, visit https://gerrit.asterisk.org/9034
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icf21093f36c60781e8cf6ee9d586536302af33e3
Gerrit-Change-Number: 9034
Gerrit-PatchSet: 1
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20180522/9441f6ba/attachment.html>


More information about the asterisk-code-review mailing list