summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2013-05-30 17:19:43 +0200
committerVicent Marti <tanoku@gmail.com>2013-05-30 17:19:43 +0200
commit979f75d8e1df7e8e43797822d5a55a8eff74fa74 (patch)
tree756b19bfcb23cca2a4eb4bc62a16ce015511e73e
parent4e6e2ff26f5a04a4628aa0d81e5d5d73acf28ec4 (diff)
downloadlibgit2-979f75d8e1df7e8e43797822d5a55a8eff74fa74.tar.gz
Refcounting
-rw-r--r--src/refdb.c6
-rw-r--r--src/refdb.h2
-rw-r--r--src/refs.c3
3 files changed, 8 insertions, 3 deletions
diff --git a/src/refdb.c b/src/refdb.c
index d8daa7773..359842e44 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -86,7 +86,7 @@ int git_refdb_compress(git_refdb *db)
return 0;
}
-static void refdb_free(git_refdb *db)
+void git_refdb__free(git_refdb *db)
{
refdb_free_backend(db);
git__free(db);
@@ -97,7 +97,7 @@ void git_refdb_free(git_refdb *db)
if (db == NULL)
return;
- GIT_REFCOUNT_DEC(db, refdb_free);
+ GIT_REFCOUNT_DEC(db, git_refdb__free);
}
int git_refdb_exists(int *exists, git_refdb *refdb, const char *ref_name)
@@ -161,7 +161,7 @@ int git_refdb_iterator_next_name(const char **out, git_reference_iterator *iter)
void git_refdb_iterator_free(git_reference_iterator *iter)
{
- GIT_REFCOUNT_DEC(iter->db, refdb_free);
+ GIT_REFCOUNT_DEC(iter->db, git_refdb__free);
iter->free(iter);
}
diff --git a/src/refdb.h b/src/refdb.h
index 62068db39..3aea37b62 100644
--- a/src/refdb.h
+++ b/src/refdb.h
@@ -16,6 +16,8 @@ struct git_refdb {
git_refdb_backend *backend;
};
+void git_refdb__free(git_refdb *db);
+
int git_refdb_exists(
int *exists,
git_refdb *refdb,
diff --git a/src/refs.c b/src/refs.c
index c60e042d9..7103decbd 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -95,6 +95,9 @@ void git_reference_free(git_reference *reference)
if (reference->type == GIT_REF_SYMBOLIC)
git__free(reference->target.symbolic);
+ if (reference->db)
+ GIT_REFCOUNT_DEC(reference->db, git_refdb__free);
+
git__free(reference);
}