From 91479b4c8ee7046e07e12848182fc635754c7a66 Mon Sep 17 00:00:00 2001
From: hniksic <devnull@localhost>
Date: Thu, 5 May 2005 02:48:08 -0700
Subject: [PATCH] [svn] Reset the sleep_adjust limit value for new downloads. 
 Fixes Debian bug 232276.

---
 src/ChangeLog | 6 ++++++
 src/retr.c    | 7 +++++++
 2 files changed, 13 insertions(+)

diff --git a/src/ChangeLog b/src/ChangeLog
index 83ac595b..58143fa8 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-05  Hrvoje Niksic  <hniksic@xemacs.org>
+
+	* retr.c (limit_bandwidth_reset): Reset sleep_adjust.
+	(limit_bandwidth): Don't allow huge "adjustment" values that
+	result from being suspended for a while.
+
 2005-05-04  Hrvoje Niksic  <hniksic@xemacs.org>
 
 	* wget.h: If gettext was found but libtintl.h wasn't, declare
diff --git a/src/retr.c b/src/retr.c
index c5c1532b..493b830f 100644
--- a/src/retr.c
+++ b/src/retr.c
@@ -82,6 +82,7 @@ limit_bandwidth_reset (void)
 {
   limit_data.chunk_bytes = 0;
   limit_data.chunk_start = 0;
+  limit_data.sleep_adjust = 0;
 }
 
 /* Limit the bandwidth by pausing the download for an amount of time.
@@ -125,6 +126,12 @@ limit_bandwidth (wgint bytes, struct ptimer *timer)
 	 desired and the actual sleep, and adjust the next sleep by
 	 that amount.  */
       limit_data.sleep_adjust = slp - (t1 - t0);
+      /* If sleep_adjust is very large, it's likely due to suspension
+	 and not clock inaccuracy.  Don't enforce those.  */
+      if (limit_data.sleep_adjust > 500)
+	limit_data.sleep_adjust = 500;
+      else if (limit_data.sleep_adjust < -500)
+	limit_data.sleep_adjust = -500;
     }
 
   limit_data.chunk_bytes = 0;