Переглянути джерело

#IQRV #comment [BugFix][Heartbeat] 心跳连卡库异常Lost

gifur 3 роки тому
батько
коміт
81e5db8a94

+ 0 - 2
Module/mod_heartbeat/HeartBeatFSM.cpp

@@ -1803,8 +1803,6 @@ void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pR
 		if (pRecvPkg->GetStructData("INSREQX", pBuf, &nLen, &nArrayNum)) {
 			Dbg("%s,%d,%d", pBuf, nLen, nArrayNum);
 			CardActiveReq* pAns = (CardActiveReq*)pBuf;
-			//Dbg("hand recv %d events", nArrayNum);
-			//for (int i = 0; i < nArrayNum; ++i)
 			if (nArrayNum > 0)
 			{
 				CSimpleStringA inParam = CSimpleStringA::Format("PkgRcvProcCardActive, type %d, from term:%s, term:%s, accLen:%d, param2Len:%d, findCard:%d,cardPos:%d",

+ 18 - 2
Module/mod_heartbeat/HeartBeatFSM.h

@@ -466,6 +466,12 @@ struct LocalProcessCrossCallTask : public ITaskSp
 		xreqInfo = (CrossCallReq*)pBuf;
 		Dbg("id:%x",xreqInfo->nEntityID);
 	}
+	~LocalProcessCrossCallTask()
+	{
+		if (xreqInfo) {
+			delete[] (BYTE*)xreqInfo;
+		}
+	}
 
 	void Process()
 	{
@@ -479,9 +485,19 @@ struct ProcessPreOnlineTask : public ITaskSp
 {
 	CHeartBeatFSM* fsm;
 	CardActiveReq* cardActiveReq;
-	ProcessPreOnlineTask(CHeartBeatFSM* f, CardActiveReq* req) : fsm(f)
+	ProcessPreOnlineTask(CHeartBeatFSM* f, CardActiveReq* req) : fsm(f),cardActiveReq(nullptr)
 	{
-		cardActiveReq = req;
+		if (req != nullptr) {
+			cardActiveReq = (CardActiveReq*)malloc(sizeof(struct CardActiveReq));
+			memcpy(cardActiveReq, req, sizeof(CardActiveReq));
+		}
+	}
+	~ProcessPreOnlineTask()
+	{
+		if (cardActiveReq != nullptr) {
+			free((void*)cardActiveReq);
+			cardActiveReq = nullptr;
+		}
 	}
 
 	void Process()