From: Russell Bryant Date: Mon, 10 Mar 2008 20:04:27 +0000 (+0000) Subject: Fix some bugs related to originating calls. If the code failed to start a PBX X-Git-Tag: 1.4.19-rc2~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0a4fc5b8c68dd2aaa487edfcabdf85e67fa9e5ac;p=thirdparty%2Fasterisk.git Fix some bugs related to originating calls. If the code failed to start a PBX on the channel (such as if you set a call limit based on the system's load average), then there were cases where a channel that has already been free'd using ast_hangup() got accessed. This caused weird memory corruption and crashes to occur. (fixes issue BE-386) (much debugging credit goes to twilson, final patch written by me) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107158 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/pbx.c b/main/pbx.c index d057ae2646..728e40170b 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -5016,6 +5016,7 @@ int ast_pbx_outgoing_exten(const char *type, int format, void *data, int timeout if (channel) *channel = NULL; ast_hangup(chan); + chan = NULL; res = -1; } } else { @@ -5026,6 +5027,7 @@ int ast_pbx_outgoing_exten(const char *type, int format, void *data, int timeout ast_channel_unlock(chan); } ast_hangup(chan); + chan = NULL; res = -1; } } @@ -5045,6 +5047,7 @@ int ast_pbx_outgoing_exten(const char *type, int format, void *data, int timeout ast_channel_unlock(chan); } ast_hangup(chan); + chan = NULL; } } @@ -5072,7 +5075,11 @@ int ast_pbx_outgoing_exten(const char *type, int format, void *data, int timeout pbx_builtin_setvar_helper(chan, "REASON", failed_reason); if (account) ast_cdr_setaccount(chan, account); - ast_pbx_run(chan); + if (ast_pbx_run(chan)) { + ast_log(LOG_ERROR, "Unable to run PBX on %s\n", chan->name); + ast_hangup(chan); + } + chan = NULL; } } }