From: Junio C Hamano <gitster@pobox.com>
Date: Sat, 29 Aug 2009 02:37:57 +0000 (-0700)
Subject: Merge branch 'maint'
X-Git-Tag: v1.6.5-rc0~27
X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/42fa6df99fe1f0439244893e81efad0cc4524c3d?hp=-c

Merge branch 'maint'

* maint:
http.c: set slot callback members to NULL when releasing object
---

42fa6df99fe1f0439244893e81efad0cc4524c3d
diff --combined http.c
index eb0c669801,d60f7f7679..5926c5b3f7
--- a/http.c
+++ b/http.c
@@@ -1006,6 -1006,7 +1006,6 @@@ int finish_http_pack_request(struct htt
  struct http_pack_request *new_http_pack_request(
  	struct packed_git *target, const char *base_url)
  {
 -	char *url;
  	char *filename;
  	long prev_posn = 0;
  	char range[RANGE_HEADER_SIZE];
@@@ -1019,7 -1020,8 +1019,7 @@@
  	end_url_with_slash(&buf, base_url);
  	strbuf_addf(&buf, "objects/pack/pack-%s.pack",
  		sha1_to_hex(target->sha1));
 -	url = strbuf_detach(&buf, NULL);
 -	preq->url = xstrdup(url);
 +	preq->url = strbuf_detach(&buf, NULL);
  
  	filename = sha1_pack_name(target->sha1);
  	snprintf(preq->filename, sizeof(preq->filename), "%s", filename);
@@@ -1035,7 -1037,7 +1035,7 @@@
  	preq->slot->local = preq->packfile;
  	curl_easy_setopt(preq->slot->curl, CURLOPT_FILE, preq->packfile);
  	curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite);
 -	curl_easy_setopt(preq->slot->curl, CURLOPT_URL, url);
 +	curl_easy_setopt(preq->slot->curl, CURLOPT_URL, preq->url);
  	curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER,
  		no_pragma_header);
  
@@@ -1059,8 -1061,6 +1059,8 @@@
  
  abort:
  	free(filename);
 +	free(preq->url);
 +	free(preq);
  	return NULL;
  }
  
@@@ -1100,6 -1100,7 +1100,6 @@@ struct http_object_request *new_http_ob
  	char *hex = sha1_to_hex(sha1);
  	char *filename;
  	char prevfile[PATH_MAX];
 -	char *url;
  	int prevlocal;
  	unsigned char prev_buf[PREV_BUF_SIZE];
  	ssize_t prev_read = 0;
@@@ -1153,7 -1154,8 +1153,7 @@@
  
  	git_SHA1_Init(&freq->c);
  
 -	url = get_remote_object_url(base_url, hex, 0);
 -	freq->url = xstrdup(url);
 +	freq->url = get_remote_object_url(base_url, hex, 0);
  
  	/*
  	 * If a previous temp file is present, process what was already
@@@ -1189,11 -1191,7 +1189,11 @@@
  		if (prev_posn>0) {
  			prev_posn = 0;
  			lseek(freq->localfile, 0, SEEK_SET);
 -			ftruncate(freq->localfile, 0);
 +			if (ftruncate(freq->localfile, 0) < 0) {
 +				error("Couldn't truncate temporary file %s for %s: %s",
 +					  freq->tmpfile, freq->filename, strerror(errno));
 +				goto abort;
 +			}
  		}
  	}
  
@@@ -1202,7 -1200,7 +1202,7 @@@
  	curl_easy_setopt(freq->slot->curl, CURLOPT_FILE, freq);
  	curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
  	curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
 -	curl_easy_setopt(freq->slot->curl, CURLOPT_URL, url);
 +	curl_easy_setopt(freq->slot->curl, CURLOPT_URL, freq->url);
  	curl_easy_setopt(freq->slot->curl, CURLOPT_HTTPHEADER, no_pragma_header);
  
  	/*
@@@ -1222,9 -1220,9 +1222,9 @@@
  
  	return freq;
  
 -	free(url);
  abort:
  	free(filename);
 +	free(freq->url);
  	free(freq);
  	return NULL;
  }
@@@ -1289,5 -1287,10 +1289,10 @@@ void release_http_object_request(struc
  		free(freq->url);
  		freq->url = NULL;
  	}
- 	freq->slot = NULL;
+ 	if (freq->slot != NULL) {
+ 		freq->slot->callback_func = NULL;
+ 		freq->slot->callback_data = NULL;
+ 		release_active_slot(freq->slot);
+ 		freq->slot = NULL;
+ 	}
  }