From 98644e565fd8bfc3e5e17fff859c24279e2ed066 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 14 Feb 2026 13:08:51 -0500 Subject: [PATCH] i2psnark: Clear bw limiters on session stop --- .../java/src/org/klomp/snark/BandwidthManager.java | 11 +++++++++++ .../java/src/org/klomp/snark/SnarkManager.java | 2 ++ core/java/src/net/i2p/util/SyntheticREDQueue.java | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/apps/i2psnark/java/src/org/klomp/snark/BandwidthManager.java b/apps/i2psnark/java/src/org/klomp/snark/BandwidthManager.java index bd5f45042..0cbfb04ad 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/BandwidthManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/BandwidthManager.java @@ -166,6 +166,17 @@ public class BandwidthManager implements BandwidthListener { return getDownloadRate() > getDownBWLimit(); } + /** + * Clear all data in the limiters + * + * @since 0.9.69 + */ + public void clear() { + _up.clear(); + _down.clear(); + _req.clear(); + } + /** * In HTML for debug page */ diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index ed41912c8..6ae42b0df 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -389,6 +389,7 @@ public class SnarkManager implements CompleteListener, ClientApp, DisconnectList stopAllTorrents(true); _stopping = false; } + _bwManager.clear(); } /* @@ -425,6 +426,7 @@ public class SnarkManager implements CompleteListener, ClientApp, DisconnectList } } } + _bwManager.clear(); if (_log.shouldWarn()) _log.warn("Snark stop() end"); } diff --git a/core/java/src/net/i2p/util/SyntheticREDQueue.java b/core/java/src/net/i2p/util/SyntheticREDQueue.java index 62855b45b..215b246d4 100644 --- a/core/java/src/net/i2p/util/SyntheticREDQueue.java +++ b/core/java/src/net/i2p/util/SyntheticREDQueue.java @@ -358,6 +358,20 @@ public class SyntheticREDQueue implements BandwidthEstimator { return (((DECAY_FACTOR - 1) * a) + b) / DECAY_FACTOR; } + /** + * Clear all data in the limiters + * + * @since 0.9.69 + */ + public synchronized void clear() { + _tAck = _context.clock().now(); + _acked = -1; + _tQSize = _tAck; + _avgQSize = 0; + _bKFiltered = 0; + _bK_ns_est = 0; + } + @Override public synchronized String toString() { return "SREDQ[" +