chenluhua1980
5 天以前 22f2984276ff75433ebeab877c96b48905826e6c
1.Slot防护
已修改4个文件
84 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CCjPage2.cpp 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CControlJobManagerDlg.cpp 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PortConfigurationDlg.cpp 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCjPage2.cpp
@@ -490,6 +490,15 @@
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    bool hasExistence = false;
    for (short w : jobExistence) {
        if (w != 0) { hasExistence = true; break; }
    }
    if (!hasExistence) {
        LOGE("ProcessStart blocked (P1): no JobExistence map (portStatus=%d, scanMap=%d).",
            port->getPortStatus(), port->getScanCassetteMap());
        return;
    }
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
@@ -502,6 +511,15 @@
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    bool hasExistence = false;
    for (short w : jobExistence) {
        if (w != 0) { hasExistence = true; break; }
    }
    if (!hasExistence) {
        LOGE("ProcessStart blocked (P2): no JobExistence map (portStatus=%d, scanMap=%d).",
            port->getPortStatus(), port->getScanCassetteMap());
        return;
    }
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
@@ -513,6 +531,15 @@
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    bool hasExistence = false;
    for (short w : jobExistence) {
        if (w != 0) { hasExistence = true; break; }
    }
    if (!hasExistence) {
        LOGE("ProcessStart blocked (P3): no JobExistence map (portStatus=%d, scanMap=%d).",
            port->getPortStatus(), port->getScanCassetteMap());
        return;
    }
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
@@ -524,6 +551,15 @@
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    bool hasExistence = false;
    for (short w : jobExistence) {
        if (w != 0) { hasExistence = true; break; }
    }
    if (!hasExistence) {
        LOGE("ProcessStart blocked (P4): no JobExistence map (portStatus=%d, scanMap=%d).",
            port->getPortStatus(), port->getScanCassetteMap());
        return;
    }
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
SourceCode/Bond/Servo/CControlJobManagerDlg.cpp
@@ -645,7 +645,25 @@
    // process start
    for (int p = 0; p < 4; p++) {
        if (bProcessStart[p]) {
            pPorts[p]->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
            if (pPorts[p] == nullptr) continue;
            short jobExistence[12] = { 0 };
            short slotProcess = 0;
            const short scanMap = pPorts[p]->getScanCassetteMap();
            if (scanMap != 0) {
                jobExistence[0] = scanMap;
                slotProcess = scanMap;
            }
            bool hasExistence = false;
            for (short w : jobExistence) {
                if (w != 0) { hasExistence = true; break; }
            }
            if (!hasExistence) {
                LOGE("ProcessStart blocked (ControlJob): no JobExistence map (port=%d, portStatus=%d, scanMap=%d).",
                    p + 1, pPorts[p]->getPortStatus(), scanMap);
                continue;
            }
            pPorts[p]->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
            Sleep(100);
        }
    }
SourceCode/Bond/Servo/CMaster.cpp
@@ -3055,6 +3055,20 @@
            slotProcess = jobExistence[0];
        }
        bool hasExistence = false;
        for (short w : jobExistence) {
            if (w != 0) { hasExistence = true; break; }
        }
        const int portStatus = pPort->getPortStatus();
        if (!hasExistence) {
            LOGE("ProcessStart blocked (ProceedWithCarrier): no JobExistence map (port=%u, portStatus=%d, scanMap=%d, cassetteId=%s).",
                port + 1, portStatus, scanMap, pPort->getCassetteId().c_str());
            return -2;
        }
        if (portStatus != PORT_INUSE) {
            LOGW("ProcessStart warning (ProceedWithCarrier): port status is %d (expected INUSE).", portStatus);
        }
        pPort->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, jobCount, nullptr, nullptr);
        return 0;
    }
SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -484,6 +484,20 @@
        slotProcess = jobExistence[0];
    }
    bool hasExistence = false;
    for (short w : jobExistence) {
        if (w != 0) { hasExistence = true; break; }
    }
    const int portStatus = pPort->getPortStatus();
    if (!hasExistence) {
        LOGE("ProcessStart blocked: no JobExistence map (port=%d, portStatus=%d, scanMap=%d, cassetteId=%s).",
            selPort + 1, portStatus, scanMap, pPort->getCassetteId().c_str());
        return;
    }
    if (portStatus != PORT_INUSE) {
        LOGW("ProcessStart warning: port status is %d (expected INUSE).", portStatus);
    }
    int ret = pPort->sendCassetteCtrlCmd(cmd, jobExistence, 12, slotProcess, jobCount, nullptr,
        [selPort](int code) -> int {
            if (code == WOK) {