summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2020-12-20 20:42:40 +0000
committerEdward Thomson <ethomson@edwardthomson.com>2020-12-20 20:42:40 +0000
commit1b70868324d63b84991f7d3a17a998d1731566fd (patch)
tree20c653853593d461da3994cc590123fa9fdb54a1
parentf52f593eb6b2fdbca8e8ca216d9cecf64322c59d (diff)
downloadlibgit2-1b70868324d63b84991f7d3a17a998d1731566fd.tar.gz
config_cache: cleanup config map lookup
-rw-r--r--src/config_cache.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/config_cache.c b/src/config_cache.c
index 2f0455af9..37617af38 100644
--- a/src/config_cache.c
+++ b/src/config_cache.c
@@ -111,18 +111,21 @@ int git_config__configmap_lookup(int *out, git_config *config, git_configmap_ite
int git_repository__configmap_lookup(int *out, git_repository *repo, git_configmap_item item)
{
- *out = (int)(intptr_t)git_atomic_load(repo->configmap_cache[(int)item]);
+ intptr_t value = (intptr_t)git_atomic_load(repo->configmap_cache[(int)item]);
- if (*out == GIT_CONFIGMAP_NOT_CACHED) {
- int error;
- int oldval = GIT_CONFIGMAP_NOT_CACHED;
+ *out = (int)value;
+
+ if (value == GIT_CONFIGMAP_NOT_CACHED) {
git_config *config;
+ intptr_t oldval = value;
+ int error;
if ((error = git_repository_config__weakptr(&config, repo)) < 0 ||
(error = git_config__configmap_lookup(out, config, item)) < 0)
return error;
- git_atomic_compare_and_swap(&repo->configmap_cache[(int)item], &oldval, out);
+ value = *out;
+ git_atomic_compare_and_swap(&repo->configmap_cache[(int)item], (void *)oldval, (void *)value);
}
return 0;