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.
This commit is contained in:
parent
eb68ea20f8
commit
b78803f9f5
|
@ -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.
|
|
@ -97,6 +97,7 @@ static void second_elapsed_callback(periodic_timer_t *timer, void *args);
|
||||||
static int conn_close_if_marked(int i);
|
static int conn_close_if_marked(int i);
|
||||||
static void connection_start_reading_from_linked_conn(connection_t *conn);
|
static void connection_start_reading_from_linked_conn(connection_t *conn);
|
||||||
static int connection_should_read_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 **********/
|
/********* START VARIABLES **********/
|
||||||
|
|
||||||
|
@ -1955,7 +1956,6 @@ do_hup(void)
|
||||||
int
|
int
|
||||||
do_main_loop(void)
|
do_main_loop(void)
|
||||||
{
|
{
|
||||||
int loop_result;
|
|
||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
/* initialize dns resolve map, spawn workers if needed */
|
/* initialize dns resolve map, spawn workers if needed */
|
||||||
|
@ -2084,7 +2084,14 @@ do_main_loop(void)
|
||||||
}
|
}
|
||||||
#endif
|
#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())
|
if (nt_service_is_stopping())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -2125,10 +2132,20 @@ do_main_loop(void)
|
||||||
log_debug(LD_NET,"libevent call interrupted.");
|
log_debug(LD_NET,"libevent call interrupted.");
|
||||||
/* You can't trust the results of this poll(). Go back to the
|
/* You can't trust the results of this poll(). Go back to the
|
||||||
* top of the big for loop. */
|
* 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 */
|
#ifndef _WIN32 /* Only called when we're willing to use signals */
|
||||||
|
|
Loading…
Reference in New Issue