|
@@ -150,7 +150,7 @@ static int called_loop_once = 0;
|
|
|
* any longer (a big time jump happened, when we notice our directory is
|
|
|
* heinously out-of-date, etc.
|
|
|
*/
|
|
|
-int can_complete_circuit=0;
|
|
|
+static int can_complete_circuits = 0;
|
|
|
|
|
|
/** How often do we check for router descriptors that we should download
|
|
|
* when we have too little directory info? */
|
|
@@ -171,11 +171,11 @@ int quiet_level = 0;
|
|
|
/********* END VARIABLES ************/
|
|
|
|
|
|
/****************************************************************************
|
|
|
-*
|
|
|
-* This section contains accessors and other methods on the connection_array
|
|
|
-* variables (which are global within this file and unavailable outside it).
|
|
|
-*
|
|
|
-****************************************************************************/
|
|
|
+ *
|
|
|
+ * This section contains accessors and other methods on the connection_array
|
|
|
+ * variables (which are global within this file and unavailable outside it).
|
|
|
+ *
|
|
|
+ ****************************************************************************/
|
|
|
|
|
|
#if 0 && defined(USE_BUFFEREVENTS)
|
|
|
static void
|
|
@@ -223,6 +223,32 @@ set_buffer_lengths_to_zero(tor_socket_t s)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+
|
|
|
+/** Return 1 if we have successfully built a circuit, and nothing has changed
|
|
|
+ * to make us think that maybe we can't.
|
|
|
+ */
|
|
|
+int
|
|
|
+have_completed_a_circuit(void)
|
|
|
+{
|
|
|
+ return can_complete_circuits;
|
|
|
+}
|
|
|
+
|
|
|
+/** Note that we have successfully built a circuit, so that reachability
|
|
|
+ * testing and introduction points and so on may be attempted. */
|
|
|
+void
|
|
|
+note_that_we_completed_a_circuit(void)
|
|
|
+{
|
|
|
+ can_complete_circuits = 1;
|
|
|
+}
|
|
|
+
|
|
|
+/** Note that something has happened (like a clock jump, or DisableNetwork) to
|
|
|
+ * make us think that maybe we can't complete circuits. */
|
|
|
+void
|
|
|
+note_that_we_maybe_cant_complete_circuits(void)
|
|
|
+{
|
|
|
+ can_complete_circuits = 0;
|
|
|
+}
|
|
|
+
|
|
|
/** Add <b>conn</b> to the array of connections that we can poll on. The
|
|
|
* connection's socket must be set; the connection starts out
|
|
|
* non-reading and non-writing.
|
|
@@ -999,7 +1025,7 @@ directory_info_has_arrived(time_t now, int from_cache)
|
|
|
}
|
|
|
|
|
|
if (server_mode(options) && !net_is_disabled() && !from_cache &&
|
|
|
- (can_complete_circuit || !any_predicted_circuits(now)))
|
|
|
+ (have_completed_a_circuit() || !any_predicted_circuits(now)))
|
|
|
consider_testing_reachability(1, 1);
|
|
|
}
|
|
|
|
|
@@ -1436,7 +1462,7 @@ run_scheduled_events(time_t now)
|
|
|
/* also, check religiously for reachability, if it's within the first
|
|
|
* 20 minutes of our uptime. */
|
|
|
if (is_server &&
|
|
|
- (can_complete_circuit || !any_predicted_circuits(now)) &&
|
|
|
+ (have_completed_a_circuit() || !any_predicted_circuits(now)) &&
|
|
|
!we_are_hibernating()) {
|
|
|
if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
|
|
|
consider_testing_reachability(1, dirport_reachability_count==0);
|
|
@@ -1549,7 +1575,7 @@ run_scheduled_events(time_t now)
|
|
|
circuit_close_all_marked();
|
|
|
|
|
|
/* 7. And upload service descriptors if necessary. */
|
|
|
- if (can_complete_circuit && !net_is_disabled()) {
|
|
|
+ if (have_completed_a_circuit() && !net_is_disabled()) {
|
|
|
rend_consider_services_upload(now);
|
|
|
rend_consider_descriptor_republication();
|
|
|
}
|
|
@@ -1680,7 +1706,7 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
|
|
|
if (server_mode(options) &&
|
|
|
!net_is_disabled() &&
|
|
|
seconds_elapsed > 0 &&
|
|
|
- can_complete_circuit &&
|
|
|
+ have_completed_a_circuit() &&
|
|
|
stats_n_seconds_working / TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT !=
|
|
|
(stats_n_seconds_working+seconds_elapsed) /
|
|
|
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
|