[tor-commits] [tor/maint-0.3.5] relays shouldn't close idle rend circuits

teor at torproject.org teor at torproject.org
Fri Apr 19 02:01:34 UTC 2019


commit a3bc950e4201fe49e7a0996753a4af83d822828b
Author: Roger Dingledine <arma at torproject.org>
Date:   Sat Mar 9 03:18:25 2019 -0500

    relays shouldn't close idle rend circuits
    
    Allow connections to single onion services to remain idle without being
    disconnected.
    
    Relays acting as rendezvous points for single onion services were
    mistakenly closing idle established rendezvous circuits after 60 seconds,
    thinking that they are unused directory-fetching circuits that had served
    their purpose.
    
    Fixes bug 29665; bugfix on 0.2.1.26.
---
 changes/bug29665    | 7 +++++++
 src/or/circuituse.c | 4 ++++
 2 files changed, 11 insertions(+)

diff --git a/changes/bug29665 b/changes/bug29665
new file mode 100644
index 000000000..d89046faf
--- /dev/null
+++ b/changes/bug29665
@@ -0,0 +1,7 @@
+  o Minor bugfixes (single onion services):
+    - Allow connections to single onion services to remain idle without
+      being disconnected. Relays acting as rendezvous points for
+      single onion services were mistakenly closing idle established
+      rendezvous circuits after 60 seconds, thinking that they are unused
+      directory-fetching circuits that had served their purpose. Fixes
+      bug 29665; bugfix on 0.2.1.26.
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 8e007ce92..03f2ae52c 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1560,10 +1560,14 @@ circuit_expire_old_circuits_serverside(time_t now)
     or_circ = TO_OR_CIRCUIT(circ);
     /* If the circuit has been idle for too long, and there are no streams
      * on it, and it ends here, and it used a create_fast, mark it for close.
+     *
+     * Also if there is a rend_splice on it, it's a single onion service
+     * circuit and we should not close it.
      */
     if (or_circ->p_chan && channel_is_client(or_circ->p_chan) &&
         !circ->n_chan &&
         !or_circ->n_streams && !or_circ->resolving_streams &&
+        !or_circ->rend_splice &&
         channel_when_last_xmit(or_circ->p_chan) <= cutoff) {
       log_info(LD_CIRC, "Closing circ_id %u (empty %d secs ago)",
                (unsigned)or_circ->p_circ_id,





More information about the tor-commits mailing list