summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-04-14 23:52:29 +0000
committerRoger Dingledine <arma@torproject.org>2004-04-14 23:52:29 +0000
commitb51561f7fb826ce145277875311070715e99b099 (patch)
treec6ed2211a82e167f77cf45508b96fa1cf6623345
parent37255d24bcb4a51bc65766c783385ce1dc55fdc2 (diff)
downloadtor-b51561f7fb826ce145277875311070715e99b099.tar.gz
tor-b51561f7fb826ce145277875311070715e99b099.zip
prune abandoned circs better
add debugging info for the bug weasel found svn:r1626
-rw-r--r--src/or/circuit.c6
-rw-r--r--src/or/connection_edge.c6
-rw-r--r--src/or/rendservice.c1
3 files changed, 12 insertions, 1 deletions
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;