From b51561f7fb826ce145277875311070715e99b099 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Wed, 14 Apr 2004 23:52:29 +0000 Subject: [PATCH] prune abandoned circs better add debugging info for the bug weasel found svn:r1626 --- src/or/circuit.c | 6 +++++- src/or/connection_edge.c | 6 ++++++ src/or/rendservice.c | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/or/circuit.c b/src/or/circuit.c index 6099a8360f..78a16b9d1d 100644 --- a/src/or/circuit.c +++ b/src/or/circuit.c @@ -474,11 +474,15 @@ void circuit_expire_building(time_t now) { * intro or rend, then mark it for close */ if(victim->state != CIRCUIT_STATE_OPEN || victim->purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND || + victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING || victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO || + /* c_rend_ready circs measure age since timestamp_dirty, * because that's set when they switch purposes */ - (victim->purpose == CIRCUIT_PURPOSE_C_REND_READY && + ((victim->purpose == CIRCUIT_PURPOSE_C_REND_READY || + victim->purpose == CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED || + victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) && victim->timestamp_dirty + MIN_SECONDS_BEFORE_EXPIRING_CIRC > now)) { if(victim->n_conn) log_fn(LOG_INFO,"Abandoning circ %s:%d:%d (state %d:%s)", diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index dc6da9fc04..d856340044 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -1150,19 +1150,24 @@ static int connection_exit_begin_conn(cell_t *cell, circuit_t *circ) { return 0; } + log_fn(LOG_DEBUG,"finished adding conn"); + /* add it into the linked list of streams on this circuit */ n_stream->next_stream = circ->n_streams; circ->n_streams = n_stream; if(circ->purpose == CIRCUIT_PURPOSE_S_REND_JOINED) { + log_fn(LOG_DEBUG,"begin is for rendezvous. configuring stream."); n_stream->address = tor_strdup("(rendezvous)"); n_stream->state = EXIT_CONN_STATE_CONNECTING; strcpy(n_stream->rend_query, circ->rend_query); + assert(n_stream->rend_query[0]); if(rend_service_set_connection_addr_port(n_stream, circ) < 0) { log_fn(LOG_WARN,"Didn't find rendezvous service (port %d)",n_stream->port); connection_mark_for_close(n_stream,0 /* XXX */); return 0; } + log_fn(LOG_DEBUG,"Finished assigning addr/port"); n_stream->cpath_layer = circ->cpath->prev; /* link it */ connection_exit_connect(n_stream); return 0; @@ -1196,6 +1201,7 @@ void connection_exit_connect(connection_t *conn) { return; } + log_fn(LOG_DEBUG,"about to try connecting"); switch(connection_connect(conn, conn->address, conn->addr, conn->port)) { case -1: connection_mark_for_close(conn, END_STREAM_REASON_CONNECTFAILED); diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 0c92d1d918..2dc8b5f1a1 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -884,6 +884,7 @@ rend_service_set_connection_addr_port(connection_t *conn, circuit_t *circ) char serviceid[REND_SERVICE_ID_LEN]; assert(circ->purpose == CIRCUIT_PURPOSE_S_REND_JOINED); + log_fn(LOG_DEBUG,"beginning to hunt for addr/port"); if (base32_encode(serviceid, REND_SERVICE_ID_LEN+1, circ->rend_pk_digest,10)) { return -1;