Subject: Re: [PATCH] Fix bunch of fd leaks in http-fetch

From: Nick Hengeveld <[email-masked]>
Date: Sat, 12 Nov 2005 09:38:28 -0800

On Fri, Nov 11, 2005 at 09:45:30PM -0800, Junio C Hamano wrote:

> It strikes me somewhat odd that these close() are not tied to
> the lifetime rule of the transfer_request structure.  When the
> program falls back from an individual object to alternates, the
> same request structure is reused, but in that case ->local stays
> the same.  Otherwise, the original request structure is released
> so I wonder if would make things cleaner to close ->local inside
> request_release()...

That is the intent of the fd close in finish_request() - but that isn't
called if the server returns a 404 and there are no alternates left to
try.

The following patch should fix it.

Added a call to finish_request to clean up resources if the server
returned a 404 and there are no alternates left to try.

Signed-off-by: Nick Hengeveld <[email-masked]>

---

 http-fetch.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

applies-to: 8bae950cd42c1d615fafdf63f4c96f6b665f1e0e
fe26837d08627fbb2f5f57879ebb573474680c4a
diff --git a/http-fetch.c b/http-fetch.c
index cbb9690..78becce 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -632,6 +632,8 @@ static void process_curl_messages(void)
 						request->repo =
 							request->repo->next;
 						start_request(request);
+					} else {
+						finish_request(request);
 					}
 				} else {
 					finish_request(request);
---
0.99.9.GIT