|  | @@ -274,13 +274,31 @@ rend_client_introduction_acked(origin_circuit_t *circ,
 | 
	
		
			
				|  |  |          circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
 | 
	
		
			
				|  |  |          return -1;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      log_info(LD_REND,
 | 
	
		
			
				|  |  | -               "Got nack for %s from %s. Re-extending circ %d, "
 | 
	
		
			
				|  |  | -               "this time to %s.",
 | 
	
		
			
				|  |  | -               escaped_safe_str(circ->rend_data->onion_address),
 | 
	
		
			
				|  |  | -               circ->build_state->chosen_exit->nickname, circ->_base.n_circ_id,
 | 
	
		
			
				|  |  | -               extend_info->nickname);
 | 
	
		
			
				|  |  | -      result = circuit_extend_to_new_exit(circ, extend_info);
 | 
	
		
			
				|  |  | +      if (circ->remaining_relay_early_cells) {
 | 
	
		
			
				|  |  | +        log_info(LD_REND,
 | 
	
		
			
				|  |  | +                 "Got nack for %s from %s. Re-extending circ %d, "
 | 
	
		
			
				|  |  | +                 "this time to %s.",
 | 
	
		
			
				|  |  | +                 escaped_safe_str(circ->rend_data->onion_address),
 | 
	
		
			
				|  |  | +                 circ->build_state->chosen_exit->nickname,
 | 
	
		
			
				|  |  | +                 circ->_base.n_circ_id, extend_info->nickname);
 | 
	
		
			
				|  |  | +        result = circuit_extend_to_new_exit(circ, extend_info);
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        log_info(LD_REND,
 | 
	
		
			
				|  |  | +                 "Got nack for %s from %s. Building a new introduction "
 | 
	
		
			
				|  |  | +                 "circuit, this time to %s.",
 | 
	
		
			
				|  |  | +                 escaped_safe_str(circ->rend_data->onion_address),
 | 
	
		
			
				|  |  | +                 circ->build_state->chosen_exit->nickname,
 | 
	
		
			
				|  |  | +                 extend_info->nickname);
 | 
	
		
			
				|  |  | +        circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
 | 
	
		
			
				|  |  | +        if (!circuit_launch_by_extend_info(CIRCUIT_PURPOSE_C_INTRODUCING,
 | 
	
		
			
				|  |  | +                                           extend_info,
 | 
	
		
			
				|  |  | +                                           CIRCLAUNCH_IS_INTERNAL)) {
 | 
	
		
			
				|  |  | +          log_warn(LD_REND, "Building introduction circuit failed.");
 | 
	
		
			
				|  |  | +          result = -1;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          result = 0;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |        extend_info_free(extend_info);
 | 
	
		
			
				|  |  |        return result;
 | 
	
		
			
				|  |  |      }
 |