diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-12-22 23:25:34 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-12-22 23:25:34 +0000 |
commit | 835a0318ee5d0c2393d6a3483c58e381824d9203 (patch) | |
tree | 377866719345fedf4a2d292472e9a58b1168ac64 /res/res_agi.c | |
parent | e3658d96ca3d675cdbfa58ed668291903a6b6f53 (diff) |
Always use the value of the AGISIGHUP when running an AGI.
Prior to this patch, the value of AGISIGUP was not always
honored when set on a channel.
(closes issue #13711)
Reported by: fmueller
Patches:
13711.patch uploaded by putnopvut (license 60)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@166470 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_agi.c')
-rw-r--r-- | res/res_agi.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/res/res_agi.c b/res/res_agi.c index 151ac1af1..21b554812 100644 --- a/res/res_agi.c +++ b/res/res_agi.c @@ -2794,25 +2794,34 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi /* how many times we'll retry if ast_waitfor_nandfs will return without either channel or file descriptor in case select is interrupted by a system call (EINTR) */ int retry = AGI_NANDFS_RETRY; - const char *sighup; + int send_sighup; + const char *sighup_str; + + ast_channel_lock(chan); + sighup_str = pbx_builtin_getvar_helper(chan, "AGISIGHUP"); + send_sighup = ast_strlen_zero(sighup_str) || !ast_false(sighup_str); + ast_channel_unlock(chan); if (!(readf = fdopen(agi->ctrl, "r"))) { ast_log(LOG_WARNING, "Unable to fdopen file descriptor\n"); - if (pid > -1) + if (send_sighup && pid > -1) kill(pid, SIGHUP); close(agi->ctrl); return AGI_RESULT_FAILURE; } + setlinebuf(readf); setup_env(chan, request, agi->fd, (agi->audio > -1), argc, argv); for (;;) { if (needhup) { needhup = 0; dead = 1; - if (pid > -1) { - kill(pid, SIGHUP); - } else if (agi->fast) { - send(agi->ctrl, "HANGUP\n", 7, MSG_OOB); + if (send_sighup) { + if (pid > -1) { + kill(pid, SIGHUP); + } else if (agi->fast) { + send(agi->ctrl, "HANGUP\n", 7, MSG_OOB); + } } } ms = -1; @@ -2897,8 +2906,7 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi } } /* Notify process */ - sighup = pbx_builtin_getvar_helper(chan, "AGISIGHUP"); - if (ast_strlen_zero(sighup) || !ast_false(sighup)) { + if (send_sighup) { if (pid > -1) { if (kill(pid, SIGHUP)) { ast_log(LOG_WARNING, "unable to send SIGHUP to AGI process %d: %s\n", pid, strerror(errno)); |