fix(sync): fix hb-timer memory leak

This commit is contained in:
Minghao Li 2022-11-16 14:25:21 +08:00
parent 7bcd13e82a
commit 81592dfb09
2 changed files with 7 additions and 10 deletions

View File

@ -56,13 +56,12 @@ typedef struct SRaftId {
SyncGroupId vgId; SyncGroupId vgId;
} SRaftId; } SRaftId;
typedef struct SSyncHbTimerParam { typedef struct SSyncHbTimerData {
SSyncNode* pSyncNode; SSyncNode* pSyncNode;
SSyncTimer* pTimer; SSyncTimer* pTimer;
SRaftId destId; SRaftId destId;
uint64_t logicClock; uint64_t logicClock;
int64_t executeTime; } SSyncHbTimerData;
} SSyncHbTimerParam;
typedef struct SSyncTimer { typedef struct SSyncTimer {
void* pTimer; void* pTimer;
@ -71,7 +70,7 @@ typedef struct SSyncTimer {
uint64_t counter; uint64_t counter;
int32_t timerMS; int32_t timerMS;
SRaftId destId; SRaftId destId;
void* pData; SSyncHbTimerData hbData;
} SSyncTimer; } SSyncTimer;
typedef struct SElectTimerParam { typedef struct SElectTimerParam {
@ -164,7 +163,6 @@ typedef struct SSyncNode {
uint64_t heartbeatTimerLogicClockUser; uint64_t heartbeatTimerLogicClockUser;
TAOS_TMR_CALLBACK FpHeartbeatTimerCB; // Timer Fp TAOS_TMR_CALLBACK FpHeartbeatTimerCB; // Timer Fp
uint64_t heartbeatTimerCounter; uint64_t heartbeatTimerCounter;
SSyncHbTimerParam hbTimerParam;
// peer heartbeat timer // peer heartbeat timer
SSyncTimer peerHeartbeatTimerArr[TSDB_MAX_REPLICA]; SSyncTimer peerHeartbeatTimerArr[TSDB_MAX_REPLICA];

View File

@ -665,13 +665,12 @@ static int32_t syncHbTimerInit(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer, SRa
static int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { static int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) {
int32_t ret = 0; int32_t ret = 0;
if (syncIsInit()) { if (syncIsInit()) {
SSyncHbTimerParam* pData = taosMemoryMalloc(sizeof(SSyncHbTimerParam)); SSyncHbTimerData* pData = &pSyncTimer->hbData;
pData->pSyncNode = pSyncNode; pData->pSyncNode = pSyncNode;
pData->pTimer = pSyncTimer; pData->pTimer = pSyncTimer;
pData->destId = pSyncTimer->destId; pData->destId = pSyncTimer->destId;
pData->logicClock = pSyncTimer->logicClock; pData->logicClock = pSyncTimer->logicClock;
pSyncTimer->pData = pData;
taosTmrReset(pSyncTimer->timerCb, pSyncTimer->timerMS, pData, syncEnv()->pTimerManager, &pSyncTimer->pTimer); taosTmrReset(pSyncTimer->timerCb, pSyncTimer->timerMS, pData, syncEnv()->pTimerManager, &pSyncTimer->pTimer);
} else { } else {
sError("vgId:%d, start ctrl hb timer error, sync env is stop", pSyncNode->vgId); sError("vgId:%d, start ctrl hb timer error, sync env is stop", pSyncNode->vgId);
@ -1930,9 +1929,9 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) {
} }
static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId) { static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId) {
SSyncHbTimerParam* pData = (SSyncHbTimerParam*)param; SSyncHbTimerData* pData = (SSyncHbTimerData*)param;
SSyncNode* pSyncNode = pData->pSyncNode; SSyncNode* pSyncNode = pData->pSyncNode;
SSyncTimer* pSyncTimer = pData->pTimer; SSyncTimer* pSyncTimer = pData->pTimer;
if (pSyncNode == NULL) { if (pSyncNode == NULL) {
return; return;