aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2019-04-19 11:42:09 +1000
committerteor <teor@torproject.org>2019-04-19 11:42:09 +1000
commit2460b4461f61c3b0fdeedb5bbfb21847a256a867 (patch)
treeb92992801dac24d3a9fba0bc3934333ec727f106
parentec213ae8a09505e97215cf9c54d1003c314c91f9 (diff)
parentadd0f89c14b4aab6726e11acdcd864ee0c91543b (diff)
downloadtor-2460b4461f61c3b0fdeedb5bbfb21847a256a867.tar.gz
tor-2460b4461f61c3b0fdeedb5bbfb21847a256a867.zip
Merge remote-tracking branch 'tor-github/pr/792' into maint-0.2.9
-rw-r--r--changes/bug296657
-rw-r--r--src/or/circuituse.c5
2 files changed, 11 insertions, 1 deletions
diff --git a/changes/bug29665 b/changes/bug29665
new file mode 100644
index 0000000000..d89046faf5
--- /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 eaf16ecbff..03b54fc3d5 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1379,10 +1379,13 @@ 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->is_first_hop && !circ->n_chan &&
!or_circ->n_streams && !or_circ->resolving_streams &&
- or_circ->p_chan &&
+ or_circ->p_chan && !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,