]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Initialize publish/subscribe code when running as an NT service.
authorNick Mathewson <nickm@torproject.org>
Mon, 6 Jan 2020 13:45:29 +0000 (08:45 -0500)
committerNick Mathewson <nickm@torproject.org>
Mon, 6 Jan 2020 14:22:57 +0000 (09:22 -0500)
Fixes bug 32778; bugfix on 0.4.1.1-alpha.

changes/bug32778 [new file with mode: 0644]
src/app/main/main.c
src/app/main/main.h
src/app/main/ntmain.c

diff --git a/changes/bug32778 b/changes/bug32778
new file mode 100644 (file)
index 0000000..ccb6104
--- /dev/null
@@ -0,0 +1,3 @@
+  o Minor bugfixes (windows service):
+    - Initialize publish/subscribe system when running as a windows service.
+      Fixes bug 32778; bugfix on 0.4.1.1-alpha.
index 6e325f0b10dda0ca810d8f8bdb7ba92beff84f4b..f3772f86e4c444d6c3b83564daf1f94f1ec7e380 100644 (file)
@@ -1236,7 +1236,7 @@ run_tor_main_loop(void)
 }
 
 /** Install the publish/subscribe relationships for all the subsystems. */
-static void
+void
 pubsub_install(void)
 {
     pubsub_builder_t *builder = pubsub_builder_new();
@@ -1248,7 +1248,7 @@ pubsub_install(void)
 
 /** Connect the mainloop to its publish/subscribe message delivery events if
  * appropriate, and configure the global channels appropriately. */
-static void
+void
 pubsub_connect(void)
 {
   if (get_options()->command == CMD_RUN_TOR) {
index 9dfaf4b8ef4d308ca0326b9b6045e2bcb76796cc..76574a907111c083d1c72c47303429cb960414cc 100644 (file)
@@ -25,4 +25,7 @@ int tor_init(int argc, char **argv);
 
 int run_tor_main_loop(void);
 
+void pubsub_install(void);
+void pubsub_connect(void);
+
 #endif /* !defined(TOR_MAIN_H) */
index f00b712702fdf4dc0a347feebf487f1a937dd321..c5a812203053f8cef5bf599fade32ea6e62549ff 100644 (file)
@@ -283,7 +283,9 @@ nt_service_body(int argc, char **argv)
     return;
   }
 
+  pubsub_install();
   r = tor_init(backup_argc, backup_argv);
+
   if (r) {
     /* Failed to start the Tor service */
     r = NT_SERVICE_ERROR_TORINIT_FAILED;
@@ -294,6 +296,8 @@ nt_service_body(int argc, char **argv)
     return;
   }
 
+  pubsub_connect();
+
   /* Set the service's status to SERVICE_RUNNING and start the main
    * event loop */
   service_status.dwCurrentState = SERVICE_RUNNING;
@@ -322,9 +326,12 @@ nt_service_main(void)
     errmsg = format_win32_error(result);
     printf("Service error %d : %s\n", (int) result, errmsg);
     tor_free(errmsg);
+
+    pubsub_install();
     if (result == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) {
       if (tor_init(backup_argc, backup_argv))
         return;
+      pubsub_connect();
       switch (get_options()->command) {
       case CMD_RUN_TOR:
         run_tor_main_loop();