Fix random crashes in http_cleanup()
For some reason, http_cleanup was running all active slots, which could lead in situations where a freed slot would be accessed in fill_active_slots. OTOH, we are cleaning up, which means the caller doesn't care about pending requests. Just forget about them instead or running them. Signed-off-by: Mike Hommey <mh@glandium.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d3df4271b9
commit
f23d1f7627
14
http.c
14
http.c
@ -281,23 +281,15 @@ void http_init(void)
|
||||
void http_cleanup(void)
|
||||
{
|
||||
struct active_request_slot *slot = active_queue_head;
|
||||
#ifdef USE_CURL_MULTI
|
||||
char *wait_url;
|
||||
#endif
|
||||
|
||||
while (slot != NULL) {
|
||||
struct active_request_slot *next = slot->next;
|
||||
if (slot->curl != NULL) {
|
||||
#ifdef USE_CURL_MULTI
|
||||
if (slot->in_use) {
|
||||
curl_easy_getinfo(slot->curl,
|
||||
CURLINFO_EFFECTIVE_URL,
|
||||
&wait_url);
|
||||
fprintf(stderr, "Waiting for %s\n", wait_url);
|
||||
run_active_slot(slot);
|
||||
}
|
||||
curl_multi_remove_handle(curlm, slot->curl);
|
||||
#endif
|
||||
if (slot->curl != NULL)
|
||||
curl_easy_cleanup(slot->curl);
|
||||
}
|
||||
free(slot);
|
||||
slot = next;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user