aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-04-16 08:21:35 +0000
committerRoger Dingledine <arma@torproject.org>2004-04-16 08:21:35 +0000
commit9c1470840f989d09c253c33275e814cc9fc4154b (patch)
treef6a1ab4b3abe5d54c248a60ea60d4bfd792dfe4b
parent598d8b8f793831c1a747f9b84c093f606b67e059 (diff)
downloadtor-9c1470840f989d09c253c33275e814cc9fc4154b.tar.gz
tor-9c1470840f989d09c253c33275e814cc9fc4154b.zip
i was wrong about one of my invariants
now it's commented this should fix asserts when you try an intro point, get a nack, and try a second one and it works. svn:r1637
-rw-r--r--src/or/circuit.c4
-rw-r--r--src/or/connection_edge.c2
-rw-r--r--src/or/rendclient.c1
3 files changed, 5 insertions, 2 deletions
diff --git a/src/or/circuit.c b/src/or/circuit.c
index 44e5d438a6..27a754591a 100644
--- a/src/or/circuit.c
+++ b/src/or/circuit.c
@@ -480,6 +480,10 @@ void circuit_expire_building(time_t now) {
/* c_rend_ready circs measure age since timestamp_dirty,
* because that's set when they switch purposes
*/
+ /* rend and intro circs become dirty each time they
+ * make an introduction attempt. so timestamp_dirty
+ * will reflect the time since the last attempt.
+ */
((victim->purpose == CIRCUIT_PURPOSE_C_REND_READY ||
victim->purpose == CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED ||
victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) &&
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 975b7158ac..82ab4c0f3b 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -948,9 +948,7 @@ int connection_ap_handshake_attach_circuit(connection_t *conn) {
if(rend_client_send_introduction(introcirc, rendcirc) < 0) {
return -1;
}
- assert(!rendcirc->timestamp_dirty);
rendcirc->timestamp_dirty = time(NULL);
- assert(!introcirc->timestamp_dirty);
introcirc->timestamp_dirty = time(NULL);
return 0;
}
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index 46fd04c049..1a1a33b000 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -166,6 +166,7 @@ rend_client_introduction_acked(circuit_t *circ,
/* Locate the rend circ which is waiting to hear about this ack,
* and tell it.
*/
+ log_fn(LOG_INFO,"Received ack. Telling rend circ.");
rendcirc = circuit_get_by_rend_query_and_purpose(
circ->rend_query, CIRCUIT_PURPOSE_C_REND_READY);
if(rendcirc) { /* remember the ack */