修复: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; msg_CcuStateFbMsg *p;
p = reinterpret_cast<msg_CcuStateFbMsg *>(m); p = reinterpret_cast<msg_CcuStateFbMsg *>(m);
sum = calculateChecksum((unsigned char*)m, sizeof(msg_CcuStateFbMsg)); sum = calculateChecksum((unsigned char*)m, sizeof(msg_CcuStateFbMsg));
if (sum != p->checkCode) { if (sum != p->checkCode) {
sError.push_back("CcuStat Msg Check error"); sError.push_back("CcuStat Msg Check error");
return false; return false;
@@ -175,10 +174,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_CcuStateFbMsg s; msg_CcuStateFbMsg s;
if(getMsgFromBuff((char *)Buff,s)) if(getMsgFromBuff((char *)Buff,s))
{ {
std::lock_guard<std::mutex> lock(m_mutexCcuState);
if(m_qReceiveCcuStateBuffer.size()<QUENUE_SIZE) if(m_qReceiveCcuStateBuffer.size()<QUENUE_SIZE)
{ {
double time = MOOSTime(false); double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexCcuState);
m_qReceiveCcuStateBuffer.push(std::make_pair(time, s)); m_qReceiveCcuStateBuffer.push(std::make_pair(time, s));
} }
else else
@@ -199,10 +198,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_CcuSetParmFbMsg s; msg_CcuSetParmFbMsg s;
if(getMsgFromBuff((char *)Buff,s)) if(getMsgFromBuff((char *)Buff,s))
{ {
std::lock_guard<std::mutex> lock(m_mutexCcuSetParm);
if(m_qReceiveCcuSetParmBuffer.size()<QUENUE_SIZE) if(m_qReceiveCcuSetParmBuffer.size()<QUENUE_SIZE)
{ {
double time = MOOSTime(false); double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexCcuSetParm);
m_qReceiveCcuSetParmBuffer.push(std::make_pair(time, s)); m_qReceiveCcuSetParmBuffer.push(std::make_pair(time, s));
} }
else else
@@ -223,10 +222,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disHighVolBusFbMsg s; msg_disHighVolBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s)) if(getMsgFromBuff((char *)Buff,s))
{ {
std::lock_guard<std::mutex> lock(m_mutexDisHighVolBus);
if(m_qReceiveDisHighVolBusBuffer.size()<QUENUE_SIZE) if(m_qReceiveDisHighVolBusBuffer.size()<QUENUE_SIZE)
{ {
double time = MOOSTime(false); double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisHighVolBus);
m_qReceiveDisHighVolBusBuffer.push(std::make_pair(time, s)); m_qReceiveDisHighVolBusBuffer.push(std::make_pair(time, s));
} }
else else
@@ -247,10 +246,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disHighAVolBusFbMsg s; msg_disHighAVolBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s)) if(getMsgFromBuff((char *)Buff,s))
{ {
std::lock_guard<std::mutex> lock(m_mutexDisHighAVolBus);
if(m_qReceiveDisHighAVolBusBuffer.size()<QUENUE_SIZE) if(m_qReceiveDisHighAVolBusBuffer.size()<QUENUE_SIZE)
{ {
double time = MOOSTime(false); double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisHighAVolBus);
m_qReceiveDisHighAVolBusBuffer.push(std::make_pair(time, s)); m_qReceiveDisHighAVolBusBuffer.push(std::make_pair(time, s));
} }
else else
@@ -271,10 +270,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disLowMainBusFbMsg s; msg_disLowMainBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s)) if(getMsgFromBuff((char *)Buff,s))
{ {
std::lock_guard<std::mutex> lock(m_mutexDisHighBVolBus);
if(m_qReceiveDisHighBVolBusBuffer.size()<QUENUE_SIZE) if(m_qReceiveDisHighBVolBusBuffer.size()<QUENUE_SIZE)
{ {
double time = MOOSTime(false); double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisHighBVolBus);
m_qReceiveDisHighBVolBusBuffer.push(std::make_pair(time, s)); m_qReceiveDisHighBVolBusBuffer.push(std::make_pair(time, s));
} }
else else
@@ -295,10 +294,10 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
msg_disLowBusFbMsg s; msg_disLowBusFbMsg s;
if(getMsgFromBuff((char *)Buff,s)) if(getMsgFromBuff((char *)Buff,s))
{ {
std::lock_guard<std::mutex> lock(m_mutexDisLowBus);
if(m_qReceiveDisLowBusBuffer.size()<QUENUE_SIZE) if(m_qReceiveDisLowBusBuffer.size()<QUENUE_SIZE)
{ {
double time = MOOSTime(false); double time = MOOSTime(false);
std::lock_guard<std::mutex> lock(m_mutexDisLowBus);
m_qReceiveDisLowBusBuffer.push(std::make_pair(time, s)); m_qReceiveDisLowBusBuffer.push(std::make_pair(time, s));
} }
else else
@@ -316,7 +315,8 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
} }
default: default:
break; break;
} }
return true;
} }
bool udpComm::clearMsgQueue() bool udpComm::clearMsgQueue()