|
@@ -549,6 +549,7 @@ circuit_handle_first_hop(origin_circuit_t *circ)
|
|
|
log_debug(LD_CIRC,"Conn open. Delivering first onion skin.");
|
|
|
if ((err_reason = circuit_send_next_onion_skin(circ)) < 0) {
|
|
|
log_info(LD_CIRC,"circuit_send_next_onion_skin failed.");
|
|
|
+ circ->base_.n_chan = NULL;
|
|
|
return err_reason;
|
|
|
}
|
|
|
}
|
|
@@ -660,18 +661,18 @@ circuit_deliver_create_cell(circuit_t *circ, const create_cell_t *create_cell,
|
|
|
static ratelim_t circid_warning_limit = RATELIM_INIT(9600);
|
|
|
log_fn_ratelim(&circid_warning_limit, LOG_WARN, LD_CIRC,
|
|
|
"failed to get unique circID.");
|
|
|
- return -1;
|
|
|
+ goto error;
|
|
|
}
|
|
|
- log_debug(LD_CIRC,"Chosen circID %u.", (unsigned)id);
|
|
|
- circuit_set_n_circid_chan(circ, id, circ->n_chan);
|
|
|
|
|
|
memset(&cell, 0, sizeof(cell_t));
|
|
|
r = relayed ? create_cell_format_relayed(&cell, create_cell)
|
|
|
: create_cell_format(&cell, create_cell);
|
|
|
if (r < 0) {
|
|
|
log_warn(LD_CIRC,"Couldn't format create cell");
|
|
|
- return -1;
|
|
|
+ goto error;
|
|
|
}
|
|
|
+ log_debug(LD_CIRC,"Chosen circID %u.", (unsigned)id);
|
|
|
+ circuit_set_n_circid_chan(circ, id, circ->n_chan);
|
|
|
cell.circ_id = circ->n_circ_id;
|
|
|
|
|
|
append_cell_to_circuit_queue(circ, circ->n_chan, &cell,
|
|
@@ -695,6 +696,9 @@ circuit_deliver_create_cell(circuit_t *circ, const create_cell_t *create_cell,
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
+ error:
|
|
|
+ circ->n_chan = NULL;
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
|