소스 검색

Uglify scheduler init logic to avoid crash on startup.

Otherwise, when we authority try to do a self-test because of
init-keys, if that self-test can't be launched for whatever reason and
so we close the channel immediately, we crash.

Yes, this a silly way for initialization to work.
Nick Mathewson 10 년 전
부모
커밋
472b62bfe4
2개의 변경된 파일9개의 추가작업 그리고 8개의 파일을 삭제
  1. 9 0
      src/or/config.c
  2. 0 8
      src/or/main.c

+ 9 - 0
src/or/config.c

@@ -43,6 +43,7 @@
 #include "util.h"
 #include "routerlist.h"
 #include "routerset.h"
+#include "scheduler.h"
 #include "statefile.h"
 #include "transports.h"
 #include "ext_orport.h"
@@ -1040,6 +1041,14 @@ options_act_reversible(const or_options_t *old_options, char **msg)
     if (running_tor && !libevent_initialized) {
       init_libevent(options);
       libevent_initialized = 1;
+
+      /*
+       * Initialize the scheduler - this has to come after
+       * options_init_from_torrc() sets up libevent - why yes, that seems
+       * completely sensible to hide the libevent setup in the option parsing
+       * code!  It also needs to happen before init_keys(), so it needs to
+       * happen here too.  How yucky. */
+      scheduler_init();
     }
 
     /* Adjust the port configuration so we can launch listeners. */

+ 0 - 8
src/or/main.c

@@ -2456,14 +2456,6 @@ tor_init(int argc, char *argv[])
     log_warn(LD_NET, "Problem initializing libevent RNG.");
   }
 
-  /*
-   * Initialize the scheduler - this has to come after
-   * options_init_from_torrc() sets up libevent - why yes, that seems
-   * completely sensible to hide the libevent setup in the option parsing
-   * code!
-   */
-  scheduler_init();
-
   return 0;
 }