projects
/
srvx.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
508125c
)
src/mail-sendmail.c (mail_send): Ignore SIGCHLD in the fork()'ed processes.
author
Michael Poole
<mdpoole@troilus.org>
Sun, 23 Mar 2008 15:25:23 +0000
(11:25 -0400)
committer
Michael Poole
<mdpoole@troilus.org>
Sun, 23 Mar 2008 15:25:23 +0000
(11:25 -0400)
src/mail-sendmail.c
patch
|
blob
|
history
diff --git
a/src/mail-sendmail.c
b/src/mail-sendmail.c
index bae492661eddc39de0680c3b13658da11d98ff16..ce2538e4d9c1c8e4a11b2cf1de6fa7c7333844ae 100644
(file)
--- a/
src/mail-sendmail.c
+++ b/
src/mail-sendmail.c
@@
-68,9
+68,11
@@
send_flowed_text(FILE *where, const char *para)
void
mail_send(struct userNode *from, struct handle_info *to, const char *subject, const char *body, int first_time)
{
void
mail_send(struct userNode *from, struct handle_info *to, const char *subject, const char *body, int first_time)
{
+ struct sigaction sv;
pid_t child;
int infds[2], outfds[2];
pid_t child;
int infds[2], outfds[2];
- const char *fromaddr, *str;
+ const char *fromaddr;
+ const char *str;
/* Grab some config items first. */
str = conf_get_data("mail/enable", RECDB_QSTRING);
/* Grab some config items first. */
str = conf_get_data("mail/enable", RECDB_QSTRING);
@@
-92,6
+94,11
@@
mail_send(struct userNode *from, struct handle_info *to, const char *subject, co
} else if (child > 0) {
return;
}
} else if (child > 0) {
return;
}
+ /* Replace the old SIGCHLD signal handler. */
+ memset(&sv, 0, sizeof(sv));
+ sigemptyset(&sv.sa_mask);
+ sv.sa_handler = SIG_IGN;
+ sigaction(SIGCHLD, &sv, NULL);
/* We're in a child now; must _exit() to die properly. */
if (pipe(infds) < 0) {
log_module(MAIN_LOG, LOG_ERROR, "sendmail() child to %s couldn't pipe(infds): %s (%d)", to->email_addr, strerror(errno), errno);
/* We're in a child now; must _exit() to die properly. */
if (pipe(infds) < 0) {
log_module(MAIN_LOG, LOG_ERROR, "sendmail() child to %s couldn't pipe(infds): %s (%d)", to->email_addr, strerror(errno), errno);