About 30? minutes without use when tor drops the last connection, it creates 6 new Conflux_linked connections that drops after 30 seconds. Then replaces them with a new set of 6 Conflux_linked only for 30 seconds. And continues this loop for ever until normal tor use is resumed.
latest commit tested: cec6f991
linux 6.4
This behavior exist at least a couple of months, before the adoption of the 4.8 series from the tor browser.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items 0
Show closed items
No child items are currently assigned. Use child items to break down this issue into smaller parts.
Linked items 0
Link issues together to show that they're related.
Learn more.
@mikeperry Hmmm so what cycles circuits every 30 seconds like that? ... Circuit expire build time function or sth? You have a theory on top of your head?
I think I hit some version of this: is it possible that we're getting stuck in some kind of GUARD_WAIT state, where we don't like the guard for the current circuits, and let them die?
I am very much not understanding this GUARD_WAIT code, and it does look like that is just what happened to me. I am not sure how to cause it to happen, though. It wasn't just 30 minutes idle..
I think that a workaround for this issue would look something like:
diff --git a/src/core/or/circuitbuild.c b/src/core/or/circuitbuild.cindex d6e022e7fa..712319d4b3 100644--- a/src/core/or/circuitbuild.c+++ b/src/core/or/circuitbuild.c@@ -1092,6 +1092,15 @@ circuit_build_no_more_hops(origin_circuit_t *circ) } else { r = entry_guard_succeeded(&circ->guard_state); }++ /* Exempt conflux circuits from this wait-for-usable-guard madness:+ * if only 1 leg is in this wait state, it will repeatedly get closed+ * due to timeout, only to retry again and again.+ */+ if (circ->base_.purpose == CIRCUIT_PURPOSE_CONFLUX_UNLINKED) {+ r = GUARD_USABLE_NOW;+ }+ const int is_usable_for_streams = (r == GUARD_USABLE_NOW); if (r == GUARD_USABLE_NOW) { circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OPEN);
but I am unable to regularly reproduce this issue. Simply waiting 30 minutes as @cypherpunks said does not do it for me. In my case, it has something to do with being disconnected or suspended.
This might also be an entirely different issue than @cypherpunks is reporting.
Here's a control port script to check circuit status.
On rare occasion, I end up stuck in GUARD_WAIT for a while, spamming circ attempts, but it eventually goes away. My assumption is that this is the bug?