]> granicus.if.org Git - curl/commitdiff
Curl_expire_latest: ignore already expired timers
authorDaniel Stenberg <daniel@haxx.se>
Mon, 10 Apr 2017 21:53:33 +0000 (23:53 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 11 Apr 2017 14:53:33 +0000 (16:53 +0200)
If the existing timer is still in there but has expired, the new timer
should be added.

Reported-by: Rainer Canavan
Bug: https://curl.haxx.se/mail/lib-2017-04/0030.html
Closes #1407

lib/multi.c
tests/data/test1238

index 46286b77b0a6e65be14e39a17b52efa3aa6b7701..b24ce19ddf6df7e48bff75d5485b59d460032d2f 100644 (file)
@@ -3001,11 +3001,14 @@ void Curl_expire_latest(struct Curl_easy *data, time_t milli)
   if(expire->tv_sec || expire->tv_usec) {
     /* This means that the struct is added as a node in the splay tree.
        Compare if the new time is earlier, and only remove-old/add-new if it
-         is. */
+       is. */
     time_t diff = curlx_tvdiff(set, *expire);
-    if(diff > 0)
-      /* the new expire time was later than the top time, so just skip this */
+    if((diff > 0) && (diff < milli)) {
+      /* if the new expire time is later than the top time, skip it, but not
+         if the diff is larger than the new offset since then the previous
+         time is already expired! */
       return;
+    }
   }
 
   /* Just add the timeout like normal */
index 4c976c776e34b22a1fa21cbc8e720c6a29c939be..a0eef417dcb4f86ac77ab9ed7dd07023796d7b60 100644 (file)
@@ -10,7 +10,7 @@ TFTP RRQ
 # Server-side
 <reply>
 <servercmd>
-writedelay: 1
+writedelay: 2
 </servercmd>
 # ~1200 bytes (so that they don't fit in two 512 byte chunks)
 <data nocheck="yes">