From 9d33d99c167a9d66e1ee293596f670268cc68c98 Mon Sep 17 00:00:00 2001 From: xywang Date: Thu, 9 Jun 2022 23:29:52 +0800 Subject: [PATCH] fix: fixed crash bugs --- src/client/src/tscAsync.c | 15 ++++++++++++++- src/client/src/tscSQLParser.c | 11 ++++++++--- src/client/src/tscUtil.c | 8 -------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index c51ba6148a..2570f473ed 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -343,6 +343,10 @@ void tscAsyncResultOnError(SSqlObj* pSql) { int tscSendMsgToServer(SSqlObj *pSql); void tscClearTableMeta(SSqlObj *pSql); +static void freeElem(void* p) { + tfree(*(char**)p); +} + void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { SSqlObj* pSql = (SSqlObj*)taosAcquireRef(tscObjRef, (int64_t)param); if (pSql == NULL) return; @@ -362,13 +366,22 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { tscAllocPayload(&pSql->cmd, (int)sz + 1); memcpy(tscGetErrorMsgPayload(&pSql->cmd), tscGetErrorMsgPayload(&sub->cmd), sz); } else if (code == TSDB_CODE_MND_INVALID_TABLE_NAME) { - if (sub->cmd.command == TSDB_SQL_MULTI_META) { + if (pSql->cmd.command == TSDB_SQL_MULTI_META && pSql->cmd.hashedTableNames) { tscClearTableMeta(pSql); + taosArrayDestroyEx(&pSql->cmd.hashedTableNames, freeElem); + pSql->cmd.hashedTableNames = NULL; } } goto _error; } + if (pSql->cmd.command == TSDB_SQL_MULTI_META) { + if (pSql->cmd.hashedTableNames) { + taosArrayDestroyEx(&pSql->cmd.hashedTableNames, freeElem); + pSql->cmd.hashedTableNames = NULL; + } + } + tscDebug("0x%"PRIx64" get %s successfully", pSql->self, msg); if (pSql->pStream == NULL) { SQueryInfo *pQueryInfo = tscGetQueryInfo(pCmd); diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 7026ab32eb..2a22988e74 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -9914,7 +9914,6 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) { SQueryInfo* pQueryInfo = tscGetQueryInfo(pCmd); pCmd->pTableMetaMap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); - pCmd->hashedTableNames = taosArrayInit(4, POINTER_BYTES); tableNameList = taosArrayInit(4, sizeof(SName)); size_t size = taosArrayGetSize(pInfo->list); @@ -9983,8 +9982,14 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) { taosArrayPush(pVgroupList, &t); tscDebug("0x%"PRIx64" failed to retrieve stable %s vgroup id list in cache, try fetch from mnode", pSql->self, name); - char* tb = strdup(name); - taosArrayPush(pCmd->hashedTableNames, &tb); + if (pCmd->hashedTableNames == NULL) { + pCmd->hashedTableNames = taosArrayInit(4, POINTER_BYTES); + } + + if (pCmd->hashedTableNames) { + char* tb = strdup(name); + taosArrayPush(pCmd->hashedTableNames, &tb); + } } else { tFilePage* pdata = (tFilePage*) pv; pVgroupIdList = taosArrayInit((size_t) pdata->num, sizeof(int32_t)); diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 1ec5369267..c385e37fb9 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -1631,10 +1631,6 @@ void destroyTableNameList(SInsertStatementParam* pInsertParam) { tfree(pInsertParam->pTableNameList); } -static void freeElem(void* p) { - tfree(*(char**)p); -} - void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) { SSqlObj *pSql = (SSqlObj*)taosAcquireRef(tscObjRef, id); pCmd->command = 0; @@ -1650,10 +1646,6 @@ void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) { tfree(pCmd->insertParam.tagData.data); pCmd->insertParam.tagData.dataLen = 0; - if (pCmd->hashedTableNames) { - taosArrayDestroyEx(&pCmd->hashedTableNames, freeElem); - } - tscFreeQueryInfo(pCmd, clearCachedMeta, id); pCmd->pTableMetaMap = tscCleanupTableMetaMap(pCmd->pTableMetaMap); taosReleaseRef(tscObjRef, id); -- GitLab