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