From 14df30671bf5511c06ef15a109466996d9df3088 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 19 Sep 2024 11:16:32 +0800 Subject: [PATCH] fix invalid read --- source/libs/transport/src/transCli.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index 17d8c819b8..4bb6efaea5 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -280,6 +280,8 @@ static void cliWalkCb(uv_handle_t* handle, void* arg); static void cliWalkCb(uv_handle_t* handle, void* arg); +static FORCE_INLINE int32_t destroyAllReqs(SCliConn* SCliConn); +static FORCE_INLINE bool filterAllReq(void* e, void* arg); typedef struct { void* p; HeapNode node; @@ -1032,6 +1034,8 @@ static void cliDestroy(uv_handle_t* handle) { SCliThrd* pThrd = conn->hostThrd; cliResetConnTimer(conn); + destroyAllReqs(conn); + if (conn->refId > 0) { (void)transReleaseExHandle(transGetRefMgt(), conn->refId); (void)transRemoveExHandle(transGetRefMgt(), conn->refId); @@ -1065,15 +1069,13 @@ static void cliDestroy(uv_handle_t* handle) { taosMemoryFree(conn); } -bool filterAllReq(void* e, void* arg) { return 1; } +static FORCE_INLINE bool filterAllReq(void* e, void* arg) { return 1; } -static void cliHandleException(SCliConn* conn) { +static FORCE_INLINE int32_t destroyAllReqs(SCliConn* conn) { int32_t code = 0; SCliThrd* pThrd = conn->hostThrd; STrans* pInst = pThrd->pInst; - - cliResetConnTimer(conn); - queue set; + queue set; QUEUE_INIT(&set); // TODO // 1. from qId from thread table @@ -1113,6 +1115,15 @@ static void cliHandleException(SCliConn* conn) { destroyReq(pReq); } } + return 0; +} +static void cliHandleException(SCliConn* conn) { + int32_t code = 0; + SCliThrd* pThrd = conn->hostThrd; + STrans* pInst = pThrd->pInst; + + cliResetConnTimer(conn); + destroyAllReqs(conn); QUEUE_REMOVE(&conn->q); if (conn->registered) {