SourceCode/Bond/Servo/CMaster.cpp
@@ -3769,6 +3769,33 @@
      }
      m_pControlJob->setPJs(tempPjs);
      // 重建运行态缓存,避免重启后仅依赖 Queued 选择导致找不到当前 PJ。
      m_inProcesJobs.clear();
      m_completeProcessJobs.clear();
      m_queueGlasses.clear();
      m_inProcesGlasses.clear();
      m_completeGlasses.clear();
      for (auto pj : tempPjs) {
         if (pj == nullptr) continue;
         switch (pj->state()) {
         case PJState::InProcess:
         case PJState::Paused:
            m_inProcesJobs.push_back(pj);
            break;
         case PJState::Completed:
         case PJState::Aborted:
         case PJState::Failed:
            m_completeProcessJobs.push_back(pj);
            break;
         default:
            break;
         }
      }
      LOGI("<Master>loadState: ProcessJob rebuild done. total=%d, inProcess=%d, complete=%d",
         (int)tempPjs.size(),
         (int)m_inProcesJobs.size(),
         (int)m_completeProcessJobs.size());
      // 更新contexts
      auto pjs = m_pControlJob->getPjs();
@@ -3801,14 +3828,25 @@
   CProcessJob* CMaster::acquireNextProcessJob()
   {
      if (m_pControlJob == nullptr) return nullptr;
      auto& pjs = m_pControlJob->getPjs();
      for (const auto pj : pjs) {
         if (pj->state() == PJState::Queued) {
            LOGI("<Master>acquireNextProcessJob: start queued PJ(%s)", pj->id().c_str());
            pj->start();
            return pj;
         }
      }
      // 若没有 Queued,继续复用已经在制/暂停的 PJ(例如 loadState 恢复后的场景)。
      for (const auto pj : pjs) {
         if (pj->state() == PJState::InProcess || pj->state() == PJState::Paused) {
            LOGI("<Master>acquireNextProcessJob: reuse PJ(%s), state=%d",
               pj->id().c_str(), (int)pj->state());
            return pj;
         }
      }
      return nullptr;
   }