[PATCH 1/3] Clean up CURL handles in unused request slots

Clean up CURL handles in unused request slots

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Nick Hengeveld
2005-10-21 12:06:10 -07:00
committed by Junio C Hamano
parent 4ae22d96fe
commit f1a906a387

View File

@ -291,11 +291,7 @@ static struct active_request_slot *get_active_slot(void)
} }
if (slot == NULL) { if (slot == NULL) {
newslot = xmalloc(sizeof(*newslot)); newslot = xmalloc(sizeof(*newslot));
#ifdef NO_CURL_EASY_DUPHANDLE newslot->curl = NULL;
newslot->curl = get_curl_handle();
#else
newslot->curl = curl_easy_duphandle(curl_default);
#endif
newslot->in_use = 0; newslot->in_use = 0;
newslot->next = NULL; newslot->next = NULL;
@ -311,6 +307,14 @@ static struct active_request_slot *get_active_slot(void)
slot = newslot; slot = newslot;
} }
if (slot->curl == NULL) {
#ifdef NO_CURL_EASY_DUPHANDLE
slot->curl = get_curl_handle();
#else
slot->curl = curl_easy_duphandle(curl_default);
#endif
}
active_requests++; active_requests++;
slot->in_use = 1; slot->in_use = 1;
slot->done = 0; slot->done = 0;
@ -612,6 +616,7 @@ void process_curl_messages(void)
void process_request_queue(void) void process_request_queue(void)
{ {
struct transfer_request *request = request_queue_head; struct transfer_request *request = request_queue_head;
struct active_request_slot *slot = active_queue_head;
int num_transfers; int num_transfers;
while (active_requests < max_requests && request != NULL) { while (active_requests < max_requests && request != NULL) {
@ -624,6 +629,14 @@ void process_request_queue(void)
} }
request = request->next; request = request->next;
} }
while (slot != NULL) {
if (!slot->in_use && slot->curl != NULL) {
curl_easy_cleanup(slot->curl);
slot->curl = NULL;
}
slot = slot->next;
}
} }
#endif #endif
@ -1297,7 +1310,8 @@ int main(int argc, char **argv)
#endif #endif
slot = active_queue_head; slot = active_queue_head;
while (slot != NULL) { while (slot != NULL) {
curl_easy_cleanup(slot->curl); if (slot->curl != NULL)
curl_easy_cleanup(slot->curl);
slot = slot->next; slot = slot->next;
} }
#ifdef USE_CURL_MULTI #ifdef USE_CURL_MULTI