From 034226fa4fee8bc3c797d546b3b7f36f90ae04aa Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 10 Apr 2017 23:53:33 +0200 Subject: Curl_expire_latest: ignore already expired timers 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 --- lib/multi.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/multi.c b/lib/multi.c index 46286b77b..453d39076 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -3001,11 +3001,15 @@ 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! */ + fprintf(stderr, "skip Curl_expire_latest = %d\n", (int)diff); return; + } } /* Just add the timeout like normal */ -- cgit v1.2.1