Commit 8c510b8313bd933e6d3b44f3ce88999d349a8dd7

Arthur Schreiber 2013-06-24T21:02:42

Fix a leak in the local transport code.

diff --git a/src/transports/local.c b/src/transports/local.c
index 4bf1c87..5500609 100644
--- a/src/transports/local.c
+++ b/src/transports/local.c
@@ -571,6 +571,8 @@ static void local_cancel(git_transport *transport)
 static int local_close(git_transport *transport)
 {
 	transport_local *t = (transport_local *)transport;
+	size_t i;
+	git_remote_head *head;
 
 	t->connected = 0;
 
@@ -584,25 +586,23 @@ static int local_close(git_transport *transport)
 		t->url = NULL;
 	}
 
+	git_vector_foreach(&t->refs, i, head) {
+		git__free(head->name);
+		git__free(head);
+	}
+
+	git_vector_free(&t->refs);
+
 	return 0;
 }
 
 static void local_free(git_transport *transport)
 {
 	transport_local *t = (transport_local *)transport;
-	size_t i;
-	git_remote_head *head;
 
 	/* Close the transport, if it's still open. */
 	local_close(transport);
 
-	git_vector_foreach(&t->refs, i, head) {
-		git__free(head->name);
-		git__free(head);
-	}
-
-	git_vector_free(&t->refs);
-
 	/* Free the transport */
 	git__free(t);
 }