[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Call crypto_postfork on start_daemon() instead.
commit a57c27a1c749add88b088f570838373687a0c6fd
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Wed Aug 8 17:32:26 2018 -0400
Call crypto_postfork on start_daemon() instead.
---
src/app/config/config.c | 7 +++----
src/lib/process/daemon.c | 10 ++++++----
src/lib/process/daemon.h | 2 +-
3 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/app/config/config.c b/src/app/config/config.c
index eb935fd4e..d2ed29562 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -1411,7 +1411,8 @@ options_act_reversible(const or_options_t *old_options, char **msg)
* processes. */
if (running_tor && options->RunAsDaemon) {
/* No need to roll back, since you can't change the value. */
- start_daemon();
+ if (start_daemon())
+ crypto_postfork();
}
#ifdef HAVE_SYSTEMD
@@ -2027,9 +2028,7 @@ options_act(const or_options_t *old_options)
/* Finish backgrounding the process */
if (options->RunAsDaemon) {
/* We may be calling this for the n'th time (on SIGHUP), but it's safe. */
- int forked = finish_daemon(options->DataDirectory);
- if (forked)
- crypto_postfork();
+ finish_daemon(options->DataDirectory);
}
/* See whether we need to enable/disable our once-a-second timer. */
diff --git a/src/lib/process/daemon.c b/src/lib/process/daemon.c
index 4836b3951..3fc224104 100644
--- a/src/lib/process/daemon.c
+++ b/src/lib/process/daemon.c
@@ -41,15 +41,16 @@ static int daemon_filedes[2];
/** Start putting the process into daemon mode: fork and drop all resources
* except standard fds. The parent process never returns, but stays around
* until finish_daemon is called. (Note: it's safe to call this more
- * than once: calls after the first are ignored.)
+ * than once: calls after the first are ignored.) Return true if we actually
+ * forked and this is the child; false otherwise.
*/
-void
+int
start_daemon(void)
{
pid_t pid;
if (start_daemon_called)
- return;
+ return 0;
start_daemon_called = 1;
if (pipe(daemon_filedes)) {
@@ -80,6 +81,7 @@ start_daemon(void)
exit(0); // exit ok: during daemonize, daemonizing.
else
exit(1); /* child reported error. exit ok: daemonize failed. */
+ return 0; // LCOV_EXCL_LINE unreachable
} else { /* Child */
close(daemon_filedes[0]); /* we only write */
@@ -95,7 +97,7 @@ start_daemon(void)
}
set_main_thread(); /* We are now the main thread. */
- return;
+ return 1;
}
}
diff --git a/src/lib/process/daemon.h b/src/lib/process/daemon.h
index 08cab17e1..c3b78029a 100644
--- a/src/lib/process/daemon.h
+++ b/src/lib/process/daemon.h
@@ -11,7 +11,7 @@
#ifndef TOR_DAEMON_H
#define TOR_DAEMON_H
-void start_daemon(void);
+int start_daemon(void);
int finish_daemon(const char *desired_cwd);
#endif
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits