修复: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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user