summaryrefslogtreecommitdiff
path: root/src/odb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/odb.c')
-rw-r--r--src/odb.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/odb.c b/src/odb.c
index 69fdba009..9b72e7fd3 100644
--- a/src/odb.c
+++ b/src/odb.c
@@ -275,6 +275,7 @@ int git_odb_new(git_odb **out)
}
*out = db;
+ GIT_REFCOUNT_INC(db);
return GIT_SUCCESS;
}
@@ -405,17 +406,14 @@ int git_odb_open(git_odb **out, const char *objects_dir)
return GIT_SUCCESS;
cleanup:
- git_odb_close(db);
+ git_odb_free(db);
return error; /* error already set - pass through */
}
-void git_odb_close(git_odb *db)
+static void odb_free(git_odb *db)
{
unsigned int i;
- if (db == NULL)
- return;
-
for (i = 0; i < db->backends.length; ++i) {
backend_internal *internal = git_vector_get(&db->backends, i);
git_odb_backend *backend = internal->backend;
@@ -431,6 +429,14 @@ void git_odb_close(git_odb *db)
git__free(db);
}
+void git_odb_free(git_odb *db)
+{
+ if (db == NULL)
+ return;
+
+ GIT_REFCOUNT_DEC(db, odb_free);
+}
+
int git_odb_exists(git_odb *db, const git_oid *id)
{
git_odb_object *object;