git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] http*: cleanup slot->local after fclose

From
Tay Ray Chuan <rctay89@gmail.com>
Date
May 31, 2009, 09:54 UTC
Message-ID
<20090531175413.962a55c3.rctay89@gmail.com>
In-Reply-To
<7vy6sdssnk.fsf@alter.siamese.dyndns.org>

Set slot->local to NULL after doing a fclose on the FILE* pointer it points to.

This fixes the issue raised by Clemens Buchacher on 30th May:
  http://www.spinics.net/lists/git/msg104623.html
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---

On Sat, 30 May 2009 23:17:19 -0700 Junio C Hamano <gitster@pobox.com> wrote:

> Shouldn't a fix instead be queued for 'maint', without "refactoring"?

I tested this on top of the first 4 patches in 'rc/http-push' in 'pu', applied on 'maint'. [1] I wonder if this should instead be queued for 'pu' [2], since the issue only occurs there, although, conceivably, it *could* happen without those patches in 'pu'.

Footnotes:
[1] You can find this in the 'http-cleanup-slot-local_maint branch' at
    git://github.com/rctay/git.git. It's quite a minimal testcase, if
    you're looking for one.
[2] Found in 'http-cleanup-slot-local_pu'.
 http-push.c   |    6 ++++++
 http-walker.c |    6 ++++++
 2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/http-push.c b/http-push.c
index e16a0ad..0b12ffe 100644
--- a/http-push.c
+++ b/http-push.c
@@ -724,9 +724,11 @@ static void finish_request(struct transfer_request *request)
 	struct stat st;
 	struct packed_git *target;
 	struct packed_git **lst;
+	struct active_request_slot *slot;
 
 	request->curl_result = request->slot->curl_result;
 	request->http_code = request->slot->http_code;
+	slot = request->slot;
 	request->slot = NULL;
 
 	/* Keep locks active */
@@ -823,6 +825,7 @@ static void finish_request(struct transfer_request *request)
 
 			fclose(request->local_stream);
 			request->local_stream = NULL;
+			slot->local = NULL;
 			if (!move_temp_to_file(request->tmpfile,
 					       request->filename)) {
 				target = (struct packed_git *)request->userData;
@@ -1024,17 +1027,20 @@ static int fetch_index(unsigned char *sha1)
 		if (results.curl_result != CURLE_OK) {
 			free(url);
 			fclose(indexfile);
+			slot->local = NULL;
 			return error("Unable to get pack index %s\n%s", url,
 				     curl_errorstr);
 		}
 	} else {
 		free(url);
 		fclose(indexfile);
+		slot->local = NULL;
 		return error("Unable to start request");
 	}
 
 	free(url);
 	fclose(indexfile);
+	slot->local = NULL;
 
 	return move_temp_to_file(tmpfile, filename);
 }
diff --git a/http-walker.c b/http-walker.c
index 7321ccc..9377851 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -418,15 +418,18 @@ static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned ch
 		run_active_slot(slot);
 		if (results.curl_result != CURLE_OK) {
 			fclose(indexfile);
+			slot->local = NULL;
 			return error("Unable to get pack index %s\n%s", url,
 				     curl_errorstr);
 		}
 	} else {
 		fclose(indexfile);
+		slot->local = NULL;
 		return error("Unable to start request");
 	}
 
 	fclose(indexfile);
+	slot->local = NULL;
 
 	return move_temp_to_file(tmpfile, filename);
 }
@@ -776,16 +779,19 @@ static int fetch_pack(struct walker *walker, struct alt_base *repo, unsigned cha
 		run_active_slot(slot);
 		if (results.curl_result != CURLE_OK) {
 			fclose(packfile);
+			slot->local = NULL;
 			return error("Unable to get pack file %s\n%s", url,
 				     curl_errorstr);
 		}
 	} else {
 		fclose(packfile);
+		slot->local = NULL;
 		return error("Unable to start request");
 	}
 
 	target->pack_size = ftell(packfile);
 	fclose(packfile);
+	slot->local = NULL;
 
 	ret = move_temp_to_file(tmpfile, filename);
 	if (ret)
-- 
1.6.3.1
Previous: Tay Ray ChuanNext: Junio C Hamano
Message 11 of 15 in “http-push: send out fetch requests on queue”
  1. 3/3 http-push: send out fetch requests on queueTay Ray Chuan, Apr 24, 2009
  2. Clemens BuchacherMay 30, 2009
  3. Tay Ray ChuanMay 30, 2009
  4. Clemens BuchacherMay 30, 2009
  5. Tay Ray ChuanMay 30, 2009
  6. Tay Ray ChuanMay 30, 2009
  7. http*: cleanup slot->local after fcloseTay Ray Chuan, May 30, 2009
  8. Clemens BuchacherMay 30, 2009
  9. Junio C HamanoMay 31, 2009
  10. Tay Ray ChuanMay 31, 2009
  11. http*: cleanup slot->local after fcloseTay Ray Chuan, May 31, 2009
  12. Junio C HamanoMay 31, 2009
  13. Tay Ray ChuanJun 1, 2009
  14. Junio C HamanoJun 1, 2009
  15. Tay Ray ChuanJun 2, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.