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)
|
void http_cleanup(void)
|
||||||
{
|
{
|
||||||
struct active_request_slot *slot = active_queue_head;
|
struct active_request_slot *slot = active_queue_head;
|
||||||
#ifdef USE_CURL_MULTI
|
|
||||||
char *wait_url;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (slot != NULL) {
|
while (slot != NULL) {
|
||||||
struct active_request_slot *next = slot->next;
|
struct active_request_slot *next = slot->next;
|
||||||
|
if (slot->curl != NULL) {
|
||||||
#ifdef USE_CURL_MULTI
|
#ifdef USE_CURL_MULTI
|
||||||
if (slot->in_use) {
|
curl_multi_remove_handle(curlm, slot->curl);
|
||||||
curl_easy_getinfo(slot->curl,
|
|
||||||
CURLINFO_EFFECTIVE_URL,
|
|
||||||
&wait_url);
|
|
||||||
fprintf(stderr, "Waiting for %s\n", wait_url);
|
|
||||||
run_active_slot(slot);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
if (slot->curl != NULL)
|
|
||||||
curl_easy_cleanup(slot->curl);
|
curl_easy_cleanup(slot->curl);
|
||||||
|
}
|
||||||
free(slot);
|
free(slot);
|
||||||
slot = next;
|
slot = next;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user