From 9796483609304405b19f8ca770cac1152f175895 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 20 Sep 2023 15:42:25 +0800 Subject: [PATCH 1/3] enh: support async fetch for sync request --- source/client/src/clientImpl.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index c78ba4c4a0..7d0b1dddd6 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -2553,6 +2553,14 @@ static void fetchCallback(void* pResult, void* param, int32_t code) { } void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param) { + if (pRequest->syncQuery) { + if (pRequest->body.param) { + tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem); + } + taosMemoryFree(pRequest->body.param); + } + + pRequest->syncQuery = false; pRequest->body.fetchFp = fp; pRequest->body.param = param; From aa86490ed2f6c7e05e8cc098175d921760c502a2 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 20 Sep 2023 18:57:00 +0800 Subject: [PATCH 2/3] fix: sync param free issue --- source/client/src/clientImpl.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 7d0b1dddd6..4826250df0 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -1698,7 +1698,10 @@ void* doAsyncFetchRows(SRequestObj* pRequest, bool setupOneRowPtr, bool convertU // convert ucs4 to native multi-bytes string pResultInfo->convertUcs4 = convertUcs4; - SSyncQueryParam* pParam = pRequest->body.param; + SSyncQueryParam* pParam = NULL; + if (pRequest->syncQuery) { + pParam = pRequest->body.param; + } taos_fetch_rows_a(pRequest, syncFetchFn, pParam); tsem_wait(&pParam->sem); } @@ -2553,7 +2556,7 @@ static void fetchCallback(void* pResult, void* param, int32_t code) { } void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param) { - if (pRequest->syncQuery) { + if (pRequest->syncQuery && pRequest->body.param != param) { if (pRequest->body.param) { tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem); } From 7d076d2db94f059595641b5b2969acd285e6ce0b Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Thu, 21 Sep 2023 09:49:43 +0800 Subject: [PATCH 3/3] fix: memory leak issue --- source/client/src/clientImpl.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 4826250df0..478f5bfaef 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -1698,10 +1698,7 @@ void* doAsyncFetchRows(SRequestObj* pRequest, bool setupOneRowPtr, bool convertU // convert ucs4 to native multi-bytes string pResultInfo->convertUcs4 = convertUcs4; - SSyncQueryParam* pParam = NULL; - if (pRequest->syncQuery) { - pParam = pRequest->body.param; - } + SSyncQueryParam* pParam = pRequest->body.param; taos_fetch_rows_a(pRequest, syncFetchFn, pParam); tsem_wait(&pParam->sem); } @@ -2561,9 +2558,9 @@ void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem); } taosMemoryFree(pRequest->body.param); + pRequest->syncQuery = false; } - pRequest->syncQuery = false; pRequest->body.fetchFp = fp; pRequest->body.param = param;