summaryrefslogtreecommitdiff
path: root/src/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/object.c b/src/object.c
index e23271442..de02ef5f2 100644
--- a/src/object.c
+++ b/src/object.c
@@ -277,6 +277,7 @@ int git_object_lookup(git_object **object_out, git_repository *repo, const git_o
object = git_hashtable_lookup(repo->objects, id);
if (object != NULL) {
*object_out = object;
+ GIT_OBJECT_INCREF(object);
return GIT_SUCCESS;
}
@@ -329,7 +330,7 @@ int git_object_lookup(git_object **object_out, git_repository *repo, const git_o
git_object__source_close(object);
git_hashtable_insert(repo->objects, &object->id, object);
- object->refcount++;
+ GIT_OBJECT_INCREF(object);
*object_out = object;
return GIT_SUCCESS;
}
@@ -383,11 +384,13 @@ void git_object__free(git_object *object)
git_object__source_close(object);
- if (object->in_memory) {
- int idx = git_vector_search(&object->repo->memory_objects, object);
- git_vector_remove(&object->repo->memory_objects, idx);
- } else {
- git_hashtable_remove(object->repo->objects, &object->id);
+ if (object->repo != NULL) {
+ if (object->in_memory) {
+ int idx = git_vector_search(&object->repo->memory_objects, object);
+ git_vector_remove(&object->repo->memory_objects, idx);
+ } else {
+ git_hashtable_remove(object->repo->objects, &object->id);
+ }
}
switch (object->source.raw.type) {