aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-27 17:42:57 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-27 17:42:57 +0000
commitf2e15e77d06f3c0695bd247b7c9adf8d8418770d (patch)
treef426c165121ed5212c0627bb7e3329f542247360
parent119d9592741bbbc7d6a47cfaa3c1258713f928c5 (diff)
Merged revisions 46363 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r46363 | russell | 2006-10-27 12:39:31 -0500 (Fri, 27 Oct 2006) | 5 lines We should always be using _exit() after a fork() or vfork() instead of exit(). This is because exit() does some extra cleanup which in some implementations of vfork(), for example, can actually modify the state of the parent process, causing very weird bugs or crashes. (issue #7971, Nick Gavrikov) ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@46364 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_externalivr.c2
-rw-r--r--main/asterisk.c2
-rw-r--r--res/res_agi.c4
-rw-r--r--res/res_musiconhold.c2
4 files changed, 5 insertions, 5 deletions
diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c
index 5d2ba1f65..f9b890588 100644
--- a/apps/app_externalivr.c
+++ b/apps/app_externalivr.c
@@ -323,7 +323,7 @@ static int app_exec(struct ast_channel *chan, void *data)
close(i);
execv(argv[0], argv);
fprintf(stderr, "Failed to execute '%s': %s\n", argv[0], strerror(errno));
- exit(1);
+ _exit(1);
} else {
/* parent process */
int child_events_fd = child_stdin[1];
diff --git a/main/asterisk.c b/main/asterisk.c
index 44bea2812..9ac742de7 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -668,7 +668,7 @@ int ast_safe_system(const char *s)
close(x);
#endif
execl("/bin/sh", "/bin/sh", "-c", s, (char *) NULL);
- exit(1);
+ _exit(1);
} else if (pid > 0) {
for(;;) {
res = wait4(pid, &status, 0, &rusage);
diff --git a/res/res_agi.c b/res/res_agi.c
index 686b17ddd..bbb1dc8a9 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -319,7 +319,7 @@ static enum agi_result launch_script(char *script, char *argv[], int *fds, int *
/* 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);
+ _exit(1);
}
/* Close everything but stdin/out/error */
@@ -332,7 +332,7 @@ static enum agi_result launch_script(char *script, char *argv[], int *fds, int *
/* Can't use ast_log since FD's are closed */
fprintf(stdout, "verbose \"Failed to execute '%s': %s\" 2\n", script, strerror(errno));
fflush(stdout);
- exit(1);
+ _exit(1);
}
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Launched AGI Script %s\n", script);
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index a8b4d62e8..44cc5498f 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -461,7 +461,7 @@ static int spawn_mp3(struct mohclass *class)
}
ast_log(LOG_WARNING, "Exec failed: %s\n", strerror(errno));
close(fds[1]);
- exit(1);
+ _exit(1);
} else {
/* Parent */
close(fds[1]);