| 
					
				 | 
			
			
				@@ -637,21 +637,15 @@ connection_ap_expire_beginning(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (circ->purpose == CIRCUIT_PURPOSE_C_REND_JOINED) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (seconds_idle >= options->SocksTimeout) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Path bias: We need to probe the circuit to ensure validity. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         * Roll its state back if it succeeded so that we do so upon close. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (TO_ORIGIN_CIRCUIT(circ)->path_state == PATH_STATE_USE_SUCCEEDED) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          log_info(LD_CIRC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   "Rolling back pathbias use state to 'attempted' for timed " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   "out rend circ %d", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   TO_ORIGIN_CIRCUIT(circ)->global_identifier); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          TO_ORIGIN_CIRCUIT(circ)->path_state = PATH_STATE_USE_ATTEMPTED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         log_fn(severity, LD_REND, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "Rend stream is %d seconds late. Giving up on address" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " '%s.onion'.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                seconds_idle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                safe_str_client(entry_conn->socks_request->address)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /* Roll back path bias use state so that we probe the circuit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * if nothing else succeeds on it */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pathbias_mark_use_rollback(TO_ORIGIN_CIRCUIT(circ)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         connection_edge_end(conn, END_STREAM_REASON_TIMEOUT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TIMEOUT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -816,14 +810,9 @@ connection_ap_detach_retriable(entry_connection_t *conn, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   control_event_stream_status(conn, STREAM_EVENT_FAILED_RETRIABLE, reason); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ENTRY_TO_CONN(conn)->timestamp_lastread = time(NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* Path bias: We need to probe the circuit to ensure validity. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Roll its state back if it succeeded so that we do so upon close. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (circ->path_state == PATH_STATE_USE_SUCCEEDED) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    log_info(LD_CIRC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             "Rolling back pathbias use state to 'attempted' for detached " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             "circuit %d", circ->global_identifier); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    circ->path_state = PATH_STATE_USE_ATTEMPTED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Roll back path bias use state so that we probe the circuit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * if nothing else succeeds on it */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  pathbias_mark_use_rollback(circ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (conn->pending_optimistic_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     generic_buffer_set_to_copy(&conn->sending_optimistic_data, 
			 |