diff --git a/es2panda/aot/emitFiles.cpp b/es2panda/aot/emitFiles.cpp index 9cf757083ad48cd11ae87f688dbff2e1ff6b02f6..2066486b77ed1c7db718b60ab0860330748bf80b 100644 --- a/es2panda/aot/emitFiles.cpp +++ b/es2panda/aot/emitFiles.cpp @@ -29,8 +29,6 @@ void EmitFileQueue::Schedule() if (mergeAbc_) { // generate merged abc auto emitMergedAbcJob = new EmitMergedAbcJob(options_->CompilerOutput(), progsInfo_); - jobs_.push_back(emitMergedAbcJob); - jobsCount_++; for (const auto &info: progsInfo_) { // generate cache protoBins and set dependencies if (!info.second->needUpdateCache) { @@ -44,6 +42,9 @@ void EmitFileQueue::Schedule() jobsCount_++; } } + // One job should be placed after those jobs which depend on it to prevent blocking + jobs_.push_back(emitMergedAbcJob); + jobsCount_++; } else { for (const auto &info: progsInfo_) { try { diff --git a/es2panda/util/workerQueue.cpp b/es2panda/util/workerQueue.cpp index 24061b69a15dc3e727d80fe4a0f0e622ae68ebd3..f86f1e130eec1468a5c5fd13e1c6af6790a583fa 100644 --- a/es2panda/util/workerQueue.cpp +++ b/es2panda/util/workerQueue.cpp @@ -79,8 +79,8 @@ void WorkerQueue::Consume() activeWorkers_++; while (jobsCount_ > 0) { - auto &job = *(jobs_[jobs_.size() - jobsCount_]); - jobsCount_--; + --jobsCount_; + auto &job = *(jobs_[jobsCount_]); lock.unlock();