Unverified Commit f4b473fa by Edward Thomson Committed by GitHub

Merge pull request #5746 from libgit2/ethomson/configmapcache

repository: use intptr_t's in the config map cache
parents 70ed3087 1b708683
...@@ -111,18 +111,21 @@ int git_config__configmap_lookup(int *out, git_config *config, git_configmap_ite ...@@ -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) 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) { *out = (int)value;
int error;
int oldval = GIT_CONFIGMAP_NOT_CACHED; if (value == GIT_CONFIGMAP_NOT_CACHED) {
git_config *config; git_config *config;
intptr_t oldval = value;
int error;
if ((error = git_repository_config__weakptr(&config, repo)) < 0 || if ((error = git_repository_config__weakptr(&config, repo)) < 0 ||
(error = git_config__configmap_lookup(out, config, item)) < 0) (error = git_config__configmap_lookup(out, config, item)) < 0)
return error; 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; return 0;
......
...@@ -154,7 +154,7 @@ struct git_repository { ...@@ -154,7 +154,7 @@ struct git_repository {
git_atomic32 attr_session_key; git_atomic32 attr_session_key;
git_configmap_value configmap_cache[GIT_CONFIGMAP_CACHE_MAX]; intptr_t configmap_cache[GIT_CONFIGMAP_CACHE_MAX];
git_strmap *submodule_cache; git_strmap *submodule_cache;
}; };
......
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