summaryrefslogtreecommitdiff
path: root/src/transports/local.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2014-11-23 14:12:54 +0100
committerCarlos Martín Nieto <cmn@dwim.me>2014-11-23 15:51:31 +0100
commitf7fcb18f8a7541bfc0228967fcbd916a9f515638 (patch)
treeac2c6cb36f16206fdf2f6d6bb5b7904141aedd2d /src/transports/local.c
parente06b1040d703b4489f8280674e59b5245595c586 (diff)
downloadlibgit2-f7fcb18f8a7541bfc0228967fcbd916a9f515638.tar.gz
Plug leaks
Valgrind is now clean except for libssl and libgcrypt.
Diffstat (limited to 'src/transports/local.c')
-rw-r--r--src/transports/local.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/transports/local.c b/src/transports/local.c
index 05302a13f..c544fa935 100644
--- a/src/transports/local.c
+++ b/src/transports/local.c
@@ -47,6 +47,17 @@ static void free_head(git_remote_head *head)
git__free(head);
}
+static void free_heads(git_vector *heads)
+{
+ git_remote_head *head;
+ size_t i;
+
+ git_vector_foreach(heads, i, head)
+ free_head(head);
+
+ git_vector_free(heads);
+}
+
static int add_ref(transport_local *t, const char *name)
{
const char peeled[] = "^{}";
@@ -198,6 +209,8 @@ static int local_connect(
if (t->connected)
return 0;
+ free_heads(&t->refs);
+
t->url = git__strdup(url);
GITERR_CHECK_ALLOC(t->url);
t->direction = direction;
@@ -624,13 +637,8 @@ static int local_close(git_transport *transport)
static void local_free(git_transport *transport)
{
transport_local *t = (transport_local *)transport;
- size_t i;
- git_remote_head *head;
- git_vector_foreach(&t->refs, i, head)
- free_head(head);
-
- git_vector_free(&t->refs);
+ free_heads(&t->refs);
/* Close the transport, if it's still open. */
local_close(transport);