summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2008-12-22 23:25:34 +0000
committerMark Michelson <mmichelson@digium.com>2008-12-22 23:25:34 +0000
commit5f95c7adae74eb01af7475006e0e7975e7a797f9 (patch)
tree377866719345fedf4a2d292472e9a58b1168ac64
parentdd7ed6614285df4c14f56439d5f52f6f76a5bb92 (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: https://origsvn.digium.com/svn/asterisk/trunk@166470 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--res/res_agi.c24
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));