| 
					
				 | 
			
			
				@@ -204,7 +204,7 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  int need_uptime, int need_internal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   circuit_t *circ, *best=NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  time_t now = time(NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  struct timeval now; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int intro_going_on_but_too_old = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tor_assert(conn); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -213,17 +213,16 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              purpose == CIRCUIT_PURPOSE_C_REND_JOINED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tor_gettimeofday(&now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (circ=global_circuitlist;circ;circ = circ->next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!circuit_is_acceptable(circ,conn,must_be_open,purpose, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               need_uptime,need_internal,now)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                               need_uptime,need_internal,now.tv_sec)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/* XXX022 make this 15 be a function of circuit finishing times we've 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * seen lately, a la Fallon Chen's GSoC work -RD */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#define REND_PARALLEL_INTRO_DELAY 15 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             !must_be_open && circ->state != CIRCUIT_STATE_OPEN && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             circ->timestamp_created.tv_sec + REND_PARALLEL_INTRO_DELAY < now) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        !must_be_open && circ->state != CIRCUIT_STATE_OPEN && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tv_mdiff(&now, &circ->timestamp_created) > circ_times.timeout_ms) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       intro_going_on_but_too_old = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 |