| 
					
				 | 
			
			
				@@ -837,6 +837,7 @@ run_scheduled_events(time_t now) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   static time_t time_to_save_stability = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define CLEAN_CACHES_INTERVAL (30*60) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   static time_t time_to_clean_caches = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  static time_t time_to_recheck_bandwidth = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   or_options_t *options = get_options(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int have_dir_info; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1003,11 +1004,24 @@ run_scheduled_events(time_t now) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 20 minutes of our uptime. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (server_mode(options) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         (has_completed_circuit || !any_predicted_circuits(now)) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         !we_are_hibernating()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      consider_testing_reachability(1, dirport_reachability_count==0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (++dirport_reachability_count > 5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        dirport_reachability_count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        consider_testing_reachability(1, dirport_reachability_count==0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (++dirport_reachability_count > 5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          dirport_reachability_count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (time_to_recheck_bandwidth < now) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /* If we haven't checked for 12 hours and our bandwidth estimate is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * low, do another bandwidth test. This is especially important for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * bridges, since they might go long periods without much use. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        routerinfo_t *me = router_get_my_routerinfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (time_to_recheck_bandwidth && me && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me->bandwidthcapacity < me->bandwidthrate && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me->bandwidthcapacity < 51200) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          reset_bandwidth_test(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define BANDWIDTH_RECHECK_INTERVAL (12*60*60) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        time_to_recheck_bandwidth = now + BANDWIDTH_RECHECK_INTERVAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* If any networkstatus documents are no longer recent, we need to 
			 |