Commit a57c27a1 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Call crypto_postfork on start_daemon() instead.

parent 622a2c6b
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -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. */
+6 −4
Original line number Diff line number Diff line
@@ -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;
  }
}

+1 −1
Original line number Diff line number Diff line
@@ -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