修复:pushMsgToQueue 缺少返回值导致 CCU 状态不更新

pushMsgToQueue 声明返回 bool,但成功路径 push 后仅 break,
函数末尾无 return,属未定义行为(返回值是垃圾寄存器值)。
导致 listenThreadFunc 中 if(pushMsgToQueue(Buff)) 判 false,
updatePoweSystemStates() 从不执行,CCU 状态消息入队后从不
处理(界面不显示)。

在函数末尾补 return true,并将各接收队列的 size() 检查
移入 lock_guard 内,消除与主线程 clear/pop 的 TOCTOU 竞争。
This commit is contained in:
zjk
2026-08-19 14:31:15 +08:00
parent da90f98fa9
commit 742f97c239
+8 -8
View File
@@ -60,7 +60,6 @@ bool udpComm::getMsgFromBuff(char *m, msg_CcuStateFbMsg &s) {
msg_CcuStateFbMsg *p;
p = reinterpret_cast<msg_CcuStateFbMsg *>(m);
sum = calculateChecksum((unsigned char*)m, sizeof(msg_CcuStateFbMsg));
if (sum != p->checkCode) {
sError.push_back("CcuStat Msg Check error");
return false;
@@ -175,10 +174,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_CcuStateFbMsg s;
if(getMsgFromBuff((char *)Buff,s))
{
std::lock_guard<std::mutex> lock(m_mutexCcuState);
if(m_qReceiveCcuStateBuffer.size()<QUENUE_SIZE)
{
double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexCcuState);
m_qReceiveCcuStateBuffer.push(std::make_pair(time, s));
}
else
@@ -199,10 +198,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_CcuSetParmFbMsg s;
if(getMsgFromBuff((char *)Buff,s))
{
std::lock_guard<std::mutex> lock(m_mutexCcuSetParm);
if(m_qReceiveCcuSetParmBuffer.size()<QUENUE_SIZE)
{
double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexCcuSetParm);
m_qReceiveCcuSetParmBuffer.push(std::make_pair(time, s));
}
else
@@ -223,10 +222,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disHighVolBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s))
{
std::lock_guard<std::mutex> lock(m_mutexDisHighVolBus);
if(m_qReceiveDisHighVolBusBuffer.size()<QUENUE_SIZE)
{
double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisHighVolBus);
m_qReceiveDisHighVolBusBuffer.push(std::make_pair(time, s));
}
else
@@ -247,10 +246,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disHighAVolBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s))
{
std::lock_guard<std::mutex> lock(m_mutexDisHighAVolBus);
if(m_qReceiveDisHighAVolBusBuffer.size()<QUENUE_SIZE)
{
double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisHighAVolBus);
m_qReceiveDisHighAVolBusBuffer.push(std::make_pair(time, s));
}
else
@@ -271,10 +270,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disLowMainBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s))
{
std::lock_guard<std::mutex> lock(m_mutexDisHighBVolBus);
if(m_qReceiveDisHighBVolBusBuffer.size()<QUENUE_SIZE)
{
double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisHighBVolBus);
m_qReceiveDisHighBVolBusBuffer.push(std::make_pair(time, s));
}
else
@@ -295,10 +294,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disLowBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s))
{
std::lock_guard<std::mutex> lock(m_mutexDisLowBus);
if(m_qReceiveDisLowBusBuffer.size()<QUENUE_SIZE)
{
double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisLowBus);
m_qReceiveDisLowBusBuffer.push(std::make_pair(time, s));
}
else
@@ -316,7 +315,8 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
}
default:
break;
}
}
return true;
}
bool udpComm::clearMsgQueue()