mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-03 00:53:32 +01:00
Merge remote-tracking branch 'origin/maint-0.2.6' into release-0.2.6
This commit is contained in:
commit
bbf304be26
3
changes/ticket15176
Normal file
3
changes/ticket15176
Normal file
@ -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 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,18 @@ do_main_loop(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
for (;;) {
|
||||
return run_main_loop_until_done();
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the main loop a single time. Return 0 for "exit"; -1 for "exit with
|
||||
* error", and 1 for "run this again."
|
||||
*/
|
||||
static int
|
||||
run_main_loop_once(void)
|
||||
{
|
||||
int loop_result;
|
||||
|
||||
if (nt_service_is_stopping())
|
||||
return 0;
|
||||
|
||||
@ -2125,10 +2136,26 @@ 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;
|
||||
}
|
||||
|
||||
/** Run the run_main_loop_once() function until it declares itself done,
|
||||
* and return its final return value.
|
||||
*
|
||||
* Shadow won't invoke this function, so don't fill it up with things.
|
||||
*/
|
||||
static int
|
||||
run_main_loop_until_done(void)
|
||||
{
|
||||
int loop_result = 1;
|
||||
do {
|
||||
loop_result = run_main_loop_once();
|
||||
} while (loop_result == 1);
|
||||
return loop_result;
|
||||
}
|
||||
|
||||
#ifndef _WIN32 /* Only called when we're willing to use signals */
|
||||
|
Loading…
Reference in New Issue
Block a user