projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH 1/3] Clean up CURL handles in unused request slots
[git.git]
/
http-fetch.c
diff --git
a/http-fetch.c
b/http-fetch.c
index
a7dc2cc
..
d26fae8
100644
(file)
--- a/
http-fetch.c
+++ b/
http-fetch.c
@@
-291,11
+291,7
@@
static struct active_request_slot *get_active_slot(void)
}
if (slot == NULL) {
newslot = xmalloc(sizeof(*newslot));
}
if (slot == NULL) {
newslot = xmalloc(sizeof(*newslot));
-#ifdef NO_CURL_EASY_DUPHANDLE
- newslot->curl = get_curl_handle();
-#else
- newslot->curl = curl_easy_duphandle(curl_default);
-#endif
+ newslot->curl = NULL;
newslot->in_use = 0;
newslot->next = NULL;
newslot->in_use = 0;
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++;
slot->in_use = 1;
slot->done = 0;
active_requests++;
slot->in_use = 1;
slot->done = 0;
@@
-612,6
+616,7
@@
void process_curl_messages(void)
void process_request_queue(void)
{
struct transfer_request *request = request_queue_head;
void process_request_queue(void)
{
struct transfer_request *request = request_queue_head;
+ struct active_request_slot *slot = active_queue_head;
int num_transfers;
while (active_requests < max_requests && request != NULL) {
int num_transfers;
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
slot = active_queue_head;
while (slot != NULL) {
#endif
slot = active_queue_head;
while (slot != NULL) {
- curl_easy_cleanup(slot->curl);
+ if (slot->curl != NULL)
+ curl_easy_cleanup(slot->curl);
slot = slot->next;
}
#ifdef USE_CURL_MULTI
slot = slot->next;
}
#ifdef USE_CURL_MULTI