Index: main.c
===================================================================
RCS file: /repository/curl/src/main.c,v
retrieving revision 1.236
diff -u -r1.236 main.c
--- main.c	19 Feb 2004 08:13:20 -0000	1.236
+++ main.c	19 Feb 2004 20:09:06 -0000
@@ -133,6 +133,14 @@
 #define CURL_PROGRESS_STATS 0 /* default progress display */
 #define CURL_PROGRESS_BAR   1
 
+/**
+ * @def MIN
+ * standard MIN macro
+ */
+#ifndef MIN
+#define MIN(X,Y)	(((X) < (Y)) ? (X) : (Y))
+#endif
+
 typedef enum {
   HTTPREQ_UNSPEC,
   HTTPREQ_GET,
@@ -2220,12 +2228,21 @@
 
     time_t timediff;
     time_t now;
+    time_t sleep_time;
 
     now = time(NULL);
     timediff = now - config->lastrecvtime;
     if( size*nmemb > config->recvpersecond*timediff) {
       /* figure out how many milliseconds to rest */
-      go_sleep ( (size*nmemb)*1000/config->recvpersecond - timediff*1000 );
+      sleep_time = (size*nmemb)*1000/config->recvpersecond - timediff*1000;
+
+      /*
+       * Make sure we don't sleep for so long that we
+       * trigger the speed limit.  This won't limit the
+       * bandwidth quite the way we've been asked to, but at
+       * least the transfer has a chance.
+       */
+      go_sleep ( MIN(sleep_time,(config->low_speed_time - 1)*1000) );
       now = time(NULL);
     }
     config->lastrecvtime = now;

