From: Nick Mathewson Date: Sat, 14 Mar 2015 18:24:18 +0000 (-0400) Subject: Extract main part of main loop into a separate function X-Git-Tag: tor-0.2.6.5-rc~3^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b78803f9f543c83bf50d0751eb160e80ed602eae;p=thirdparty%2Ftor.git Extract main part of main loop into a separate function For 15176; Shadow would like this. Based on a patch by Rob Jansen, but revised to have a minimal-sized diff. --- diff --git a/changes/ticket15176 b/changes/ticket15176 new file mode 100644 index 0000000000..6d12723728 --- /dev/null +++ b/changes/ticket15176 @@ -0,0 +1,3 @@ + o Code simplification and refactoring: + - Refactor main loop to extract the 'loop' part. This makes it easier + to run Tor under Shadow. Closes ticket 15176. diff --git a/src/or/main.c b/src/or/main.c index bc89458e87..f5bca4e51b 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -97,6 +97,7 @@ static void second_elapsed_callback(periodic_timer_t *timer, void *args); static int conn_close_if_marked(int i); static void connection_start_reading_from_linked_conn(connection_t *conn); static int connection_should_read_from_linked_conn(connection_t *conn); +static int run_main_loop_until_done(void); /********* START VARIABLES **********/ @@ -1955,7 +1956,6 @@ do_hup(void) int do_main_loop(void) { - int loop_result; time_t now; /* initialize dns resolve map, spawn workers if needed */ @@ -2084,7 +2084,14 @@ do_main_loop(void) } #endif - for (;;) { + return run_main_loop_until_done(); +} + +static int +run_main_loop_once(void) +{ + int loop_result; + if (1) { if (nt_service_is_stopping()) return 0; @@ -2125,10 +2132,20 @@ do_main_loop(void) log_debug(LD_NET,"libevent call interrupted."); /* You can't trust the results of this poll(). Go back to the * top of the big for loop. */ - continue; + return 1; } } } + return 1; +} + +static int +run_main_loop_until_done(void) +{ + int loop_result = 1; + while ((loop_result = run_main_loop_once()) == 1) + continue; + return loop_result; } #ifndef _WIN32 /* Only called when we're willing to use signals */