diff options
Diffstat (limited to 'services/incremental/IncrementalService.cpp')
-rw-r--r-- | services/incremental/IncrementalService.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp index 695b68bf71cb..149dfa6be6c4 100644 --- a/services/incremental/IncrementalService.cpp +++ b/services/incremental/IncrementalService.cpp @@ -1279,7 +1279,7 @@ bool IncrementalService::configureNativeBinaries(StorageId storage, std::string_ { std::lock_guard lock(mJobMutex); if (mRunning) { - auto& existingJobs = mJobQueue[storage]; + auto& existingJobs = mJobQueue[ifs->mountId]; if (existingJobs.empty()) { existingJobs = std::move(jobQueue); } else { @@ -1369,12 +1369,32 @@ void IncrementalService::extractZipFile(const IfsMountPtr& ifs, ZipArchiveHandle } bool IncrementalService::waitForNativeBinariesExtraction(StorageId storage) { + struct WaitPrinter { + const Clock::time_point startTs = Clock::now(); + ~WaitPrinter() noexcept { + if (sEnablePerfLogging) { + const auto endTs = Clock::now(); + LOG(INFO) << "incfs: waitForNativeBinariesExtraction() complete in " + << elapsedMcs(startTs, endTs) << "mcs"; + } + } + } waitPrinter; + + MountId mount; + { + auto ifs = getIfs(storage); + if (!ifs) { + return true; + } + mount = ifs->mountId; + } + std::unique_lock lock(mJobMutex); - mJobCondition.wait(lock, [this, storage] { + mJobCondition.wait(lock, [this, mount] { return !mRunning || - (mPendingJobsStorage != storage && mJobQueue.find(storage) == mJobQueue.end()); + (mPendingJobsMount != mount && mJobQueue.find(mount) == mJobQueue.end()); }); - return mPendingJobsStorage != storage && mJobQueue.find(storage) == mJobQueue.end(); + return mRunning; } void IncrementalService::runJobProcessing() { @@ -1386,7 +1406,7 @@ void IncrementalService::runJobProcessing() { } auto it = mJobQueue.begin(); - mPendingJobsStorage = it->first; + mPendingJobsMount = it->first; auto queue = std::move(it->second); mJobQueue.erase(it); lock.unlock(); @@ -1396,7 +1416,7 @@ void IncrementalService::runJobProcessing() { } lock.lock(); - mPendingJobsStorage = kInvalidStorageId; + mPendingJobsMount = kInvalidStorageId; lock.unlock(); mJobCondition.notify_all(); } |