From dacce74706f5af5263e7eaf158d2e8c6fe9bf030 Mon Sep 17 00:00:00 2001 From: Amos Bird Date: Mon, 20 Aug 2018 20:18:01 +0800 Subject: [PATCH] correctly grabbing the ownership of index files. --- src/pipeline.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/pipeline.cc b/src/pipeline.cc index 053d4f4f..c2235b1e 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -194,6 +194,14 @@ bool Indexer_Parse(DiagnosticsPublisher *diag_pub, WorkingFiles *working_files, } } + // grab the ownership + if (reparse) + { + std::lock_guard lock(vfs->mutex); + vfs->state[path_to_index].owner = g_thread_id; + vfs->state[path_to_index].stage = 0; + } + if (reparse < 2) { LOG_S(INFO) << "load cache for " << path_to_index; auto dependencies = prev->dependencies; @@ -207,11 +215,6 @@ bool Indexer_Parse(DiagnosticsPublisher *diag_pub, WorkingFiles *working_files, IndexUpdate update = IndexUpdate::CreateDelta(nullptr, prev.get()); on_indexed->PushBack(std::move(update), request.is_interactive); } - - std::lock_guard lock(vfs->mutex); - VFS::State &state = vfs->state[path_to_index]; - if (state.owner == g_thread_id) - state.stage = 0; return true; }