aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-03-15 08:53:03 -0400
committerNick Mathewson <nickm@torproject.org>2019-03-15 08:53:03 -0400
commitaf56dece09e116abf671f8723c6d0a503f69167e (patch)
treee9e97ea62cd1f17c1d7f629d0890a544ab65e263 /src/core
parentaee65084b421d0b5ff717cc9e01dd92f4e96be9e (diff)
parent94523bffdc3c06a9645d8e1d81fd9e3b6b3a0551 (diff)
downloadtor-af56dece09e116abf671f8723c6d0a503f69167e.tar.gz
tor-af56dece09e116abf671f8723c6d0a503f69167e.zip
Merge branch 'maint-0.4.0'
Diffstat (limited to 'src/core')
-rw-r--r--src/core/or/circuituse.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c
index 2fdf6f7e8c..fd782c0cd1 100644
--- a/src/core/or/circuituse.c
+++ b/src/core/or/circuituse.c
@@ -1576,10 +1576,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,