Index: curl/lib/multi.c =================================================================== RCS file: /cvsroot/curl/curl/lib/multi.c,v retrieving revision 1.87 diff -u -r1.87 multi.c --- curl/lib/multi.c 13 Jul 2006 18:57:34 -0000 1.87 +++ curl/lib/multi.c 16 Jul 2006 18:59:59 -0000 @@ -381,6 +381,11 @@ /* If the 'state' is not INIT or COMPLETED, we might need to do something nice to put the easy_handle in a good known state when this returns. */ + /* The timer must be shut down before easy->multi is set to NULL, + else the timenode will remain in the splay tree after + curl_easy_cleanup is called. */ + Curl_expire(easy->easy_handle, 0); + if(easy->easy_handle->dns.hostcachetype == HCACHE_MULTI) { /* clear out the usage of the shared DNS cache */ easy->easy_handle->dns.hostcache = NULL; @@ -962,6 +967,14 @@ int key = now.tv_sec; /* drop the usec part */ multi->timetree = Curl_splaygetbest(key, multi->timetree, &t); + + if (t) { + struct timeval* tv = &((struct SessionHandle*)t->payload)->state.expiretime; + + tv->tv_sec = 0; + tv->tv_usec = 0; + } + } while(t); return returncode; @@ -1207,8 +1220,11 @@ key = now.tv_sec; /* drop the usec part */ multi->timetree = Curl_splaygetbest(key, multi->timetree, &t); - if(t) + if(t) { data = t->payload; + data->state.expiretime.tv_sec = 0; + data->state.expiretime.tv_usec = 0; + } } while(t);