Code

http-fetch: Fix object list corruption in fill_active_slots().
authorMark Wooding <mdw@distorted.org.uk>
Wed, 1 Feb 2006 11:44:28 +0000 (11:44 +0000)
committerJunio C Hamano <junkio@cox.net>
Mon, 6 Feb 2006 00:49:16 +0000 (16:49 -0800)
In fill_active_slots() -- if we find an object which has already arrived,
say as part of a pack, /don't/ remove it from the list.  It's already been
prefetched and someone will ask for it later.  Just label it as done and
carry blithely on.  (As it was, the code would dereference a freed object
to continue through the list anyway.)

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
http-fetch.c

index 72edf28b0010ad107bae16a7330bad34f4bb5bca..7b1b2a02dc873b8d3a3a17c3e4f3c0a389d28f6d 100644 (file)
@@ -311,7 +311,7 @@ void fill_active_slots(void)
        while (active_requests < max_requests && obj_req != NULL) {
                if (obj_req->state == WAITING) {
                        if (has_sha1_file(obj_req->sha1))
-                               release_object_request(obj_req);
+                               obj_req->state = COMPLETE;
                        else
                                start_object_request(obj_req);
                        curl_multi_perform(curlm, &num_transfers);