aboutsummaryrefslogtreecommitdiff
path: root/mailutils/mail.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2009-03-10 16:01:57 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2009-03-10 16:01:57 +0000
commit4774179cb9e04030485773adf2b7b1055a10faeb (patch)
tree91bb5c51f9f4e3036298d7bb5490621b3e7a3ee6 /mailutils/mail.c
parent245f91b6494063c5fa1f3f586771e2ac100a69a9 (diff)
downloadbusybox-w32-4774179cb9e04030485773adf2b7b1055a10faeb.tar.gz
busybox-w32-4774179cb9e04030485773adf2b7b1055a10faeb.tar.bz2
busybox-w32-4774179cb9e04030485773adf2b7b1055a10faeb.zip
mail.c: more robust handling of SIGCHLD
init: more robust signal handling
Diffstat (limited to '')
-rw-r--r--mailutils/mail.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/mailutils/mail.c b/mailutils/mail.c
index 71f46c86f..68883ff42 100644
--- a/mailutils/mail.c
+++ b/mailutils/mail.c
@@ -48,6 +48,12 @@ void FAST_FUNC launch_helper(const char **argv)
48 xpipe(pipes); 48 xpipe(pipes);
49 xpipe(pipes + 2); 49 xpipe(pipes + 2);
50 50
51 // NB: handler must be installed before vfork
52 bb_signals(0
53 + (1 << SIGCHLD)
54 + (1 << SIGALRM)
55 , signal_handler);
56
51 G.helper_pid = vfork(); 57 G.helper_pid = vfork();
52 if (G.helper_pid < 0) 58 if (G.helper_pid < 0)
53 bb_perror_msg_and_die("vfork"); 59 bb_perror_msg_and_die("vfork");
@@ -60,15 +66,12 @@ void FAST_FUNC launch_helper(const char **argv)
60 66
61 if (!G.helper_pid) { 67 if (!G.helper_pid) {
62 // child: try to execute connection helper 68 // child: try to execute connection helper
69 // NB: SIGCHLD & SIGALRM revert to SIG_DFL on exec
63 BB_EXECVP(*argv, (char **)argv); 70 BB_EXECVP(*argv, (char **)argv);
64 _exit(127); 71 _exit(127);
65 } 72 }
66 73
67 // parent 74 // parent
68 bb_signals(0
69 + (1 << SIGCHLD)
70 + (1 << SIGALRM)
71 , signal_handler);
72 // check whether child is alive 75 // check whether child is alive
73 //redundant:signal_handler(SIGCHLD); 76 //redundant:signal_handler(SIGCHLD);
74 // child seems OK -> parent goes on 77 // child seems OK -> parent goes on