Commit c03f00ea by Carlos Martín Nieto Committed by GitHub

Merge pull request #4131 from pks-t/pks/attrcache-cleanups

Attrcache cleanups
parents 86201b92 ce6f61da
...@@ -103,8 +103,11 @@ static int attr_cache_upsert(git_attr_cache *cache, git_attr_file *file) ...@@ -103,8 +103,11 @@ static int attr_cache_upsert(git_attr_cache *cache, git_attr_file *file)
GIT_REFCOUNT_OWN(file, entry); GIT_REFCOUNT_OWN(file, entry);
GIT_REFCOUNT_INC(file); GIT_REFCOUNT_INC(file);
old = git__compare_and_swap( /*
&entry->file[file->source], entry->file[file->source], file); * Replace the existing value if another thread has
* created it in the meantime.
*/
old = git__swap(entry->file[file->source], file);
if (old) { if (old) {
GIT_REFCOUNT_OWN(old, NULL); GIT_REFCOUNT_OWN(old, NULL);
...@@ -309,7 +312,7 @@ static void attr_cache__free(git_attr_cache *cache) ...@@ -309,7 +312,7 @@ static void attr_cache__free(git_attr_cache *cache)
if (!cache) if (!cache)
return; return;
unlock = (git_mutex_lock(&cache->lock) == 0); unlock = (attr_cache_lock(cache) == 0);
if (cache->files != NULL) { if (cache->files != NULL) {
git_attr_file_entry *entry; git_attr_file_entry *entry;
...@@ -345,13 +348,13 @@ static void attr_cache__free(git_attr_cache *cache) ...@@ -345,13 +348,13 @@ static void attr_cache__free(git_attr_cache *cache)
cache->cfg_excl_file = NULL; cache->cfg_excl_file = NULL;
if (unlock) if (unlock)
git_mutex_unlock(&cache->lock); attr_cache_unlock(cache);
git_mutex_free(&cache->lock); git_mutex_free(&cache->lock);
git__free(cache); git__free(cache);
} }
int git_attr_cache__do_init(git_repository *repo) int git_attr_cache__init(git_repository *repo)
{ {
int ret = 0; int ret = 0;
git_attr_cache *cache = git_repository_attr_cache(repo); git_attr_cache *cache = git_repository_attr_cache(repo);
...@@ -429,7 +432,7 @@ int git_attr_cache__insert_macro(git_repository *repo, git_attr_rule *macro) ...@@ -429,7 +432,7 @@ int git_attr_cache__insert_macro(git_repository *repo, git_attr_rule *macro)
if (macro->assigns.length == 0) if (macro->assigns.length == 0)
return 0; return 0;
if (git_mutex_lock(&cache->lock) < 0) { if (attr_cache_lock(cache) < 0) {
giterr_set(GITERR_OS, "unable to get attr cache lock"); giterr_set(GITERR_OS, "unable to get attr cache lock");
error = -1; error = -1;
} else { } else {
......
...@@ -22,10 +22,7 @@ typedef struct { ...@@ -22,10 +22,7 @@ typedef struct {
git_pool pool; git_pool pool;
} git_attr_cache; } git_attr_cache;
extern int git_attr_cache__do_init(git_repository *repo); extern int git_attr_cache__init(git_repository *repo);
#define git_attr_cache__init(REPO) \
(git_repository_attr_cache(REPO) ? 0 : git_attr_cache__do_init(REPO))
/* get file - loading and reload as needed */ /* get file - loading and reload as needed */
extern int git_attr_cache__get( extern int git_attr_cache__get(
......
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