mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
Fix sighup with AGI (bug #4854)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6264 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -211,6 +211,7 @@ static int launch_script(char *script, char *argv[], int *fds, int *efd, int *op
|
||||
int audio[2];
|
||||
int x;
|
||||
int res;
|
||||
sigset_t signal_set;
|
||||
|
||||
if (!strncasecmp(script, "agi://", 6))
|
||||
return launch_netscript(script, argv, fds, efd, opid);
|
||||
@@ -266,9 +267,17 @@ static int launch_script(char *script, char *argv[], int *fds, int *efd, int *op
|
||||
} else {
|
||||
close(STDERR_FILENO + 1);
|
||||
}
|
||||
|
||||
/* unblock important signal handlers */
|
||||
if (sigfillset(&signal_set) || pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL)) {
|
||||
ast_log(LOG_WARNING, "unable to unblock signals for AGI script: %s\n", strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Close everything but stdin/out/error */
|
||||
for (x=STDERR_FILENO + 2;x<1024;x++)
|
||||
close(x);
|
||||
|
||||
/* Execute script */
|
||||
execv(script, argv);
|
||||
/* Can't use ast_log since FD's are closed */
|
||||
@@ -430,7 +439,7 @@ static int handle_tddmode(struct ast_channel *chan, AGI *agi, int argc, char *ar
|
||||
if (!strncasecmp(argv[2],"tdd",3))
|
||||
x = 1;
|
||||
res = ast_channel_setoption(chan, AST_OPTION_TDD, &x, sizeof(char), 0);
|
||||
if(res != RESULT_SUCCESS)
|
||||
if (res != RESULT_SUCCESS)
|
||||
fdprintf(agi->fd, "200 result=0\n");
|
||||
else
|
||||
fdprintf(agi->fd, "200 result=1\n");
|
||||
@@ -467,7 +476,7 @@ static int handle_streamfile(struct ast_channel *chan, AGI *agi, int argc, char
|
||||
return RESULT_SHOWUSAGE;
|
||||
|
||||
fs = ast_openstream(chan, argv[2], chan->language);
|
||||
if(!fs){
|
||||
if (!fs){
|
||||
fdprintf(agi->fd, "200 result=%d endpos=%ld\n", 0, sample_offset);
|
||||
return RESULT_SUCCESS;
|
||||
}
|
||||
@@ -523,7 +532,7 @@ static int handle_getoption(struct ast_channel *chan, AGI *agi, int argc, char *
|
||||
}
|
||||
|
||||
fs = ast_openstream(chan, argv[2], chan->language);
|
||||
if(!fs){
|
||||
if (!fs){
|
||||
fdprintf(agi->fd, "200 result=%d endpos=%ld\n", 0, sample_offset);
|
||||
ast_log(LOG_WARNING, "Unable to open %s\n", argv[2]);
|
||||
return RESULT_SUCCESS;
|
||||
@@ -1817,8 +1826,10 @@ static int run_agi(struct ast_channel *chan, char *request, AGI *agi, int pid, i
|
||||
}
|
||||
}
|
||||
/* Notify process */
|
||||
if (pid > -1)
|
||||
kill(pid, 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));
|
||||
}
|
||||
fclose(readf);
|
||||
return returnstatus;
|
||||
}
|
||||
|
Reference in New Issue
Block a user