diff options
Diffstat (limited to 'third_party/git/replace-object.c')
-rw-r--r-- | third_party/git/replace-object.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/third_party/git/replace-object.c b/third_party/git/replace-object.c index e295e8794310..7bd9aba6ee6c 100644 --- a/third_party/git/replace-object.c +++ b/third_party/git/replace-object.c @@ -34,14 +34,23 @@ static int register_replace_ref(struct repository *r, void prepare_replace_object(struct repository *r) { - if (r->objects->replace_map) + if (r->objects->replace_map_initialized) return; + pthread_mutex_lock(&r->objects->replace_mutex); + if (r->objects->replace_map_initialized) { + pthread_mutex_unlock(&r->objects->replace_mutex); + return; + } + r->objects->replace_map = xmalloc(sizeof(*r->objects->replace_map)); oidmap_init(r->objects->replace_map, 0); for_each_replace_ref(r, register_replace_ref, NULL); + r->objects->replace_map_initialized = 1; + + pthread_mutex_unlock(&r->objects->replace_mutex); } /* We allow "recursive" replacement. Only within reason, though */ |