提交 9d33d99c 编写于 作者: X xywang

fix: fixed crash bugs

上级 34e4a146
...@@ -343,6 +343,10 @@ void tscAsyncResultOnError(SSqlObj* pSql) { ...@@ -343,6 +343,10 @@ void tscAsyncResultOnError(SSqlObj* pSql) {
int tscSendMsgToServer(SSqlObj *pSql); int tscSendMsgToServer(SSqlObj *pSql);
void tscClearTableMeta(SSqlObj *pSql); void tscClearTableMeta(SSqlObj *pSql);
static void freeElem(void* p) {
tfree(*(char**)p);
}
void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
SSqlObj* pSql = (SSqlObj*)taosAcquireRef(tscObjRef, (int64_t)param); SSqlObj* pSql = (SSqlObj*)taosAcquireRef(tscObjRef, (int64_t)param);
if (pSql == NULL) return; if (pSql == NULL) return;
...@@ -362,13 +366,22 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { ...@@ -362,13 +366,22 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
tscAllocPayload(&pSql->cmd, (int)sz + 1); tscAllocPayload(&pSql->cmd, (int)sz + 1);
memcpy(tscGetErrorMsgPayload(&pSql->cmd), tscGetErrorMsgPayload(&sub->cmd), sz); memcpy(tscGetErrorMsgPayload(&pSql->cmd), tscGetErrorMsgPayload(&sub->cmd), sz);
} else if (code == TSDB_CODE_MND_INVALID_TABLE_NAME) { } 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); tscClearTableMeta(pSql);
taosArrayDestroyEx(&pSql->cmd.hashedTableNames, freeElem);
pSql->cmd.hashedTableNames = NULL;
} }
} }
goto _error; 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); tscDebug("0x%"PRIx64" get %s successfully", pSql->self, msg);
if (pSql->pStream == NULL) { if (pSql->pStream == NULL) {
SQueryInfo *pQueryInfo = tscGetQueryInfo(pCmd); SQueryInfo *pQueryInfo = tscGetQueryInfo(pCmd);
......
...@@ -9914,7 +9914,6 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -9914,7 +9914,6 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SQueryInfo* pQueryInfo = tscGetQueryInfo(pCmd); SQueryInfo* pQueryInfo = tscGetQueryInfo(pCmd);
pCmd->pTableMetaMap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); pCmd->pTableMetaMap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
pCmd->hashedTableNames = taosArrayInit(4, POINTER_BYTES);
tableNameList = taosArrayInit(4, sizeof(SName)); tableNameList = taosArrayInit(4, sizeof(SName));
size_t size = taosArrayGetSize(pInfo->list); size_t size = taosArrayGetSize(pInfo->list);
...@@ -9983,8 +9982,14 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -9983,8 +9982,14 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
taosArrayPush(pVgroupList, &t); taosArrayPush(pVgroupList, &t);
tscDebug("0x%"PRIx64" failed to retrieve stable %s vgroup id list in cache, try fetch from mnode", pSql->self, name); tscDebug("0x%"PRIx64" failed to retrieve stable %s vgroup id list in cache, try fetch from mnode", pSql->self, name);
char* tb = strdup(name); if (pCmd->hashedTableNames == NULL) {
taosArrayPush(pCmd->hashedTableNames, &tb); pCmd->hashedTableNames = taosArrayInit(4, POINTER_BYTES);
}
if (pCmd->hashedTableNames) {
char* tb = strdup(name);
taosArrayPush(pCmd->hashedTableNames, &tb);
}
} else { } else {
tFilePage* pdata = (tFilePage*) pv; tFilePage* pdata = (tFilePage*) pv;
pVgroupIdList = taosArrayInit((size_t) pdata->num, sizeof(int32_t)); pVgroupIdList = taosArrayInit((size_t) pdata->num, sizeof(int32_t));
......
...@@ -1631,10 +1631,6 @@ void destroyTableNameList(SInsertStatementParam* pInsertParam) { ...@@ -1631,10 +1631,6 @@ void destroyTableNameList(SInsertStatementParam* pInsertParam) {
tfree(pInsertParam->pTableNameList); tfree(pInsertParam->pTableNameList);
} }
static void freeElem(void* p) {
tfree(*(char**)p);
}
void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) { void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) {
SSqlObj *pSql = (SSqlObj*)taosAcquireRef(tscObjRef, id); SSqlObj *pSql = (SSqlObj*)taosAcquireRef(tscObjRef, id);
pCmd->command = 0; pCmd->command = 0;
...@@ -1650,10 +1646,6 @@ void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) { ...@@ -1650,10 +1646,6 @@ void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta, uint64_t id) {
tfree(pCmd->insertParam.tagData.data); tfree(pCmd->insertParam.tagData.data);
pCmd->insertParam.tagData.dataLen = 0; pCmd->insertParam.tagData.dataLen = 0;
if (pCmd->hashedTableNames) {
taosArrayDestroyEx(&pCmd->hashedTableNames, freeElem);
}
tscFreeQueryInfo(pCmd, clearCachedMeta, id); tscFreeQueryInfo(pCmd, clearCachedMeta, id);
pCmd->pTableMetaMap = tscCleanupTableMetaMap(pCmd->pTableMetaMap); pCmd->pTableMetaMap = tscCleanupTableMetaMap(pCmd->pTableMetaMap);
taosReleaseRef(tscObjRef, id); taosReleaseRef(tscObjRef, id);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册