summaryrefslogtreecommitdiff
path: root/src/submodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/submodule.c')
-rw-r--r--src/submodule.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/submodule.c b/src/submodule.c
index b07c9d917..0a3762fab 100644
--- a/src/submodule.c
+++ b/src/submodule.c
@@ -852,10 +852,13 @@ int git_submodule_reload_all(git_repository *repo, int force)
git_strmap_foreach_value(repo->submodules, sm, {
git_strmap *cache = repo->submodules;
- if ((sm->flags & GIT_SUBMODULE_STATUS__IN_FLAGS) == 0) {
- submodule_cache_remove_item(cache, sm->name, sm, true);
+ if (sm && (sm->flags & GIT_SUBMODULE_STATUS__IN_FLAGS) == 0) {
+ /* we must check path != name before first remove, in case
+ * that call frees the submodule */
+ bool free_as_path = (sm->path != sm->name);
- if (sm->path != sm->name)
+ submodule_cache_remove_item(cache, sm->name, sm, true);
+ if (free_as_path)
submodule_cache_remove_item(cache, sm->path, sm, true);
}
});