Skip to content

Commit f708498

Browse files
committed
torcontrol: Limit reconnect timeout to max seconds and log delay in whole seconds
Signed-off-by: Eval EXEC <[email protected]>
1 parent 15717f0 commit f708498

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/torcontrol.cpp

+8-3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#include <algorithm>
2828
#include <cassert>
29+
#include <cstdint>
2930
#include <cstdlib>
3031
#include <deque>
3132
#include <functional>
@@ -60,6 +61,8 @@ static const std::string TOR_SAFE_CLIENTKEY = "Tor safe cookie authentication co
6061
static const float RECONNECT_TIMEOUT_START = 1.0;
6162
/** Exponential backoff configuration - growth factor */
6263
static const float RECONNECT_TIMEOUT_EXP = 1.5;
64+
/** Maximum reconnect timeout in seconds to prevent excessive delays */
65+
static const float RECONNECT_TIMEOUT_MAX = 600.0;
6366
/** Maximum length for lines received on TorControlConnection.
6467
* tor-control-spec.txt mentions that there is explicitly no limit defined to line length,
6568
* this is belt-and-suspenders sanity limit to prevent memory exhaustion.
@@ -631,13 +634,15 @@ void TorController::disconnected_cb(TorControlConnection& _conn)
631634
if (!reconnect)
632635
return;
633636

634-
LogDebug(BCLog::TOR, "Not connected to Tor control port %s, trying to reconnect\n", m_tor_control_center);
637+
LogDebug(BCLog::TOR, "Not connected to Tor control port %s, retrying in %.2f s\n",
638+
m_tor_control_center, reconnect_timeout);
635639

636-
// Single-shot timer for reconnect. Use exponential backoff.
640+
// Single-shot timer for reconnect. Use exponential backoff with a maximum.
637641
struct timeval time = MillisToTimeval(int64_t(reconnect_timeout * 1000.0));
638642
if (reconnect_ev)
639643
event_add(reconnect_ev, &time);
640-
reconnect_timeout *= RECONNECT_TIMEOUT_EXP;
644+
645+
reconnect_timeout = std::min(reconnect_timeout * RECONNECT_TIMEOUT_EXP, RECONNECT_TIMEOUT_MAX);
641646
}
642647

643648
void TorController::Reconnect()

0 commit comments

Comments
 (0)