|
Ian Kent |
4816d7 |
autofs-5.0.4 - fix return start status on fail
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
From: Ian Kent <raven@themaw.net>
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
We're not returning the status to the parent when automount(8) is waiting
|
|
Ian Kent |
4816d7 |
for the daemon to finish its startup.
|
|
Ian Kent |
4816d7 |
---
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
CHANGELOG | 1 +
|
|
Ian Kent |
4816d7 |
daemon/automount.c | 27 +++++++++++++++++++++------
|
|
Ian Kent |
4816d7 |
2 files changed, 22 insertions(+), 6 deletions(-)
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
diff --git a/CHANGELOG b/CHANGELOG
|
|
Ian Kent |
4816d7 |
index fdde400..2cb35dc 100644
|
|
Ian Kent |
4816d7 |
--- a/CHANGELOG
|
|
Ian Kent |
4816d7 |
+++ b/CHANGELOG
|
|
Ian Kent |
4816d7 |
@@ -27,6 +27,7 @@
|
|
Ian Kent |
4816d7 |
- add WITH_LIBTIRPC to -V status report.
|
|
Ian Kent |
4816d7 |
- add nfs mount protocol default configuration option.
|
|
Ian Kent |
4816d7 |
- fix bad token declaration in master map parser.
|
|
Ian Kent |
4816d7 |
+- fix return start status on fail.
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
4/11/2008 autofs-5.0.4
|
|
Ian Kent |
4816d7 |
-----------------------
|
|
Ian Kent |
4816d7 |
diff --git a/daemon/automount.c b/daemon/automount.c
|
|
Ian Kent |
4816d7 |
index 776c92c..80691fa 100644
|
|
Ian Kent |
4816d7 |
--- a/daemon/automount.c
|
|
Ian Kent |
4816d7 |
+++ b/daemon/automount.c
|
|
Ian Kent |
4816d7 |
@@ -60,7 +60,7 @@ long global_negative_timeout = -1;
|
|
Ian Kent |
4816d7 |
int do_force_unlink = 0; /* Forceably unlink mount tree at startup */
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
static int start_pipefd[2];
|
|
Ian Kent |
4816d7 |
-static int st_stat = 0;
|
|
Ian Kent |
4816d7 |
+static int st_stat = 1;
|
|
Ian Kent |
4816d7 |
static int *pst_stat = &st_stat;
|
|
Ian Kent |
4816d7 |
static pthread_t state_mach_thid;
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
@@ -1046,6 +1046,7 @@ static void become_daemon(unsigned foreground, unsigned daemon_check)
|
|
Ian Kent |
4816d7 |
{
|
|
Ian Kent |
4816d7 |
FILE *pidfp;
|
|
Ian Kent |
4816d7 |
char buf[MAX_ERR_BUF];
|
|
Ian Kent |
4816d7 |
+ int res;
|
|
Ian Kent |
4816d7 |
pid_t pid;
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
/* Don't BUSY any directories unnecessarily */
|
|
Ian Kent |
4816d7 |
@@ -1072,10 +1073,9 @@ static void become_daemon(unsigned foreground, unsigned daemon_check)
|
|
Ian Kent |
4816d7 |
} else {
|
|
Ian Kent |
4816d7 |
pid = fork();
|
|
Ian Kent |
4816d7 |
if (pid > 0) {
|
|
Ian Kent |
4816d7 |
- int r;
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
- r = read(start_pipefd[0], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
- if (r < 0)
|
|
Ian Kent |
4816d7 |
+ res = read(start_pipefd[0], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
+ if (res < 0)
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
exit(*pst_stat);
|
|
Ian Kent |
4816d7 |
} else if (pid < 0) {
|
|
Ian Kent |
4816d7 |
@@ -1088,8 +1088,13 @@ static void become_daemon(unsigned foreground, unsigned daemon_check)
|
|
Ian Kent |
4816d7 |
if (daemon_check && !aquire_flag_file()) {
|
|
Ian Kent |
4816d7 |
fprintf(stderr, "%s: program is already running.\n",
|
|
Ian Kent |
4816d7 |
program);
|
|
Ian Kent |
4816d7 |
+ /* Return success if already running */
|
|
Ian Kent |
4816d7 |
+ st_stat = 0;
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
+ if (res < 0)
|
|
Ian Kent |
4816d7 |
+ exit(1);
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
- exit(1);
|
|
Ian Kent |
4816d7 |
+ exit(*pst_stat);
|
|
Ian Kent |
4816d7 |
}
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
/*
|
|
Ian Kent |
4816d7 |
@@ -1099,8 +1104,9 @@ static void become_daemon(unsigned foreground, unsigned daemon_check)
|
|
Ian Kent |
4816d7 |
if (setsid() == -1) {
|
|
Ian Kent |
4816d7 |
char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
|
|
Ian Kent |
4816d7 |
fprintf(stderr, "setsid: %s", estr);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
- exit(1);
|
|
Ian Kent |
4816d7 |
+ exit(*pst_stat);
|
|
Ian Kent |
4816d7 |
}
|
|
Ian Kent |
4816d7 |
log_to_syslog();
|
|
Ian Kent |
4816d7 |
}
|
|
Ian Kent |
4816d7 |
@@ -1991,6 +1997,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
if (!master_list) {
|
|
Ian Kent |
4816d7 |
logerr("%s: can't create master map %s",
|
|
Ian Kent |
4816d7 |
program, argv[0]);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -1999,6 +2006,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
if (pthread_attr_init(&th_attr)) {
|
|
Ian Kent |
4816d7 |
logerr("%s: failed to init thread attribute struct!",
|
|
Ian Kent |
4816d7 |
program);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -2007,6 +2015,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
if (pthread_attr_init(&th_attr_detached)) {
|
|
Ian Kent |
4816d7 |
logerr("%s: failed to init thread attribute struct!",
|
|
Ian Kent |
4816d7 |
program);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -2016,6 +2025,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
&th_attr_detached, PTHREAD_CREATE_DETACHED)) {
|
|
Ian Kent |
4816d7 |
logerr("%s: failed to set detached thread attribute!",
|
|
Ian Kent |
4816d7 |
program);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -2026,6 +2036,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
&th_attr_detached, PTHREAD_STACK_MIN*64)) {
|
|
Ian Kent |
4816d7 |
logerr("%s: failed to set stack size thread attribute!",
|
|
Ian Kent |
4816d7 |
program);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -2043,6 +2054,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
logerr("%s: failed to create thread data key for std env vars!",
|
|
Ian Kent |
4816d7 |
program);
|
|
Ian Kent |
4816d7 |
master_kill(master_list);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -2053,6 +2065,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
if (!alarm_start_handler()) {
|
|
Ian Kent |
4816d7 |
logerr("%s: failed to create alarm handler thread!", program);
|
|
Ian Kent |
4816d7 |
master_kill(master_list);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -2061,6 +2074,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
if (!st_start_handler()) {
|
|
Ian Kent |
4816d7 |
logerr("%s: failed to create FSM handler thread!", program);
|
|
Ian Kent |
4816d7 |
master_kill(master_list);
|
|
Ian Kent |
4816d7 |
+ res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
release_flag_file();
|
|
Ian Kent |
4816d7 |
exit(1);
|
|
Ian Kent |
4816d7 |
@@ -2092,6 +2106,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
4816d7 |
*/
|
|
Ian Kent |
4816d7 |
do_force_unlink = 0;
|
|
Ian Kent |
4816d7 |
|
|
Ian Kent |
4816d7 |
+ st_stat = 0;
|
|
Ian Kent |
4816d7 |
res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
|
|
Ian Kent |
4816d7 |
close(start_pipefd[1]);
|
|
Ian Kent |
4816d7 |
|