summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/incremental/IncrementalService.cpp32
-rw-r--r--services/incremental/IncrementalService.h4
2 files changed, 28 insertions, 8 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();
}
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index e7705df633d1..c016bab067be 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -308,8 +308,8 @@ private:
StorageId mNextId = 0;
using Job = std::function<void()>;
- std::unordered_map<StorageId, std::vector<Job>> mJobQueue;
- StorageId mPendingJobsStorage = kInvalidStorageId;
+ std::unordered_map<MountId, std::vector<Job>> mJobQueue;
+ MountId mPendingJobsMount = kInvalidStorageId;
std::condition_variable mJobCondition;
std::mutex mJobMutex;
std::thread mJobProcessor;