Merge branch 'nd/pthreads'
[git/git.git] / builtin / grep.c
index de3f568..cca87cf 100644 (file)
@@ -407,11 +407,23 @@ static int grep_submodule(struct grep_opt *opt, struct repository *superproject,
        struct repository submodule;
        int hit;
 
        struct repository submodule;
        int hit;
 
-       if (!is_submodule_active(superproject, path))
+       /*
+        * NEEDSWORK: submodules functions need to be protected because they
+        * access the object store via config_from_gitmodules(): the latter
+        * uses get_oid() which, for now, relies on the global the_repository
+        * object.
+        */
+       grep_read_lock();
+
+       if (!is_submodule_active(superproject, path)) {
+               grep_read_unlock();
                return 0;
                return 0;
+       }
 
 
-       if (repo_submodule_init(&submodule, superproject, path))
+       if (repo_submodule_init(&submodule, superproject, path)) {
+               grep_read_unlock();
                return 0;
                return 0;
+       }
 
        repo_read_gitmodules(&submodule);
 
 
        repo_read_gitmodules(&submodule);
 
@@ -425,7 +437,6 @@ static int grep_submodule(struct grep_opt *opt, struct repository *superproject,
         * store is no longer global and instead is a member of the repository
         * object.
         */
         * store is no longer global and instead is a member of the repository
         * object.
         */
-       grep_read_lock();
        add_to_alternates_memory(submodule.objects->objectdir);
        grep_read_unlock();
 
        add_to_alternates_memory(submodule.objects->objectdir);
        grep_read_unlock();