Commit 7f66a70e by Edward Thomson

attr_cache_remove: don't remove given file

If `attr_cache_lookup_entry` fails to find the given file, make sure
that we do not try to free the given file.
parent a0d38479
...@@ -121,20 +121,22 @@ static int attr_cache_remove(git_attr_cache *cache, git_attr_file *file) ...@@ -121,20 +121,22 @@ static int attr_cache_remove(git_attr_cache *cache, git_attr_file *file)
{ {
int error = 0; int error = 0;
git_attr_file_entry *entry; git_attr_file_entry *entry;
git_attr_file *old = NULL;
if (!file) if (!file)
return 0; return 0;
if ((error = attr_cache_lock(cache)) < 0) if ((error = attr_cache_lock(cache)) < 0)
return error; return error;
if ((entry = attr_cache_lookup_entry(cache, file->entry->path)) != NULL) if ((entry = attr_cache_lookup_entry(cache, file->entry->path)) != NULL)
file = git__compare_and_swap(&entry->file[file->source], file, NULL); old = git__compare_and_swap(&entry->file[file->source], file, NULL);
attr_cache_unlock(cache); attr_cache_unlock(cache);
if (file) { if (old) {
GIT_REFCOUNT_OWN(file, NULL); GIT_REFCOUNT_OWN(old, NULL);
git_attr_file__free(file); git_attr_file__free(old);
} }
return error; return error;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment