diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index f8510850176a8ccc09818aff888f7940e40ace77..cb6a73612165a09cba9afba34ad5b5c9bd83f3bb 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -209,6 +209,7 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcIpSet *pIpSet) { tscError("%p sql is already released", pSql->signature); return; } + if (pSql->signature != pSql) { tscError("%p sql is already released, signature:%p", pSql, pSql->signature); return; @@ -217,10 +218,9 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcIpSet *pIpSet) { SSqlRes *pRes = &pSql->res; SSqlCmd *pCmd = &pSql->cmd; STscObj *pObj = pSql->pTscObj; - // tscTrace("%p msg:%s is received from server", pSql, taosMsg[rpcMsg->msgType]); if (pObj->signature != pObj || pSql->freed == 1) { - tscTrace("%p sql is already released or DB connection is closed, freed:%d pObj:%p signature:%p", pSql, pSql->freed, + tscTrace("%p sqlObj needs to be released or DB connection is closed, freed:%d pObj:%p signature:%p", pSql, pSql->freed, pObj, pObj->signature); tscFreeSqlObj(pSql); rpcFreeCont(rpcMsg->pCont); diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index cfcb40537aaef462f2bc7974a29f320779d37a7a..6f043f186a9673840d6deffd57639bc76a74ff67 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -219,6 +219,11 @@ void waitForQueryRsp(void *param, TAOS_RES *tres, int code) { sem_post(&pSql->rspSem); } +static void waitForRetrieveRsp(void *param, TAOS_RES *tres, int numOfRows) { + SSqlObj* pSql = (SSqlObj*) tres; + sem_post(&pSql->rspSem); +} + TAOS_RES* taos_query(TAOS *taos, const char *sqlstr) { STscObj *pObj = (STscObj *)taos; if (pObj == NULL || pObj->signature != pObj) { @@ -369,11 +374,6 @@ int taos_fetch_block_impl(TAOS_RES *res, TAOS_ROW *rows) { return (pQueryInfo->order.order == TSDB_ORDER_DESC) ? pRes->numOfRows : -pRes->numOfRows; } -static void waitForRetrieveRsp(void *param, TAOS_RES *tres, int numOfRows) { - SSqlObj* pSql = (SSqlObj*) tres; - sem_post(&pSql->rspSem); -} - TAOS_ROW taos_fetch_row(TAOS_RES *res) { SSqlObj *pSql = (SSqlObj *)res; if (pSql == NULL || pSql->signature != pSql) { @@ -496,14 +496,14 @@ static bool tscFreeQhandleInVnode(SSqlObj* pSql) { tscProcessSql(pSql); // in case of sync model query, waits for response and then goes on - if (pSql->fp == waitForQueryRsp || pSql->fp == waitForRetrieveRsp) { - sem_wait(&pSql->rspSem); +// if (pSql->fp == waitForQueryRsp || pSql->fp == waitForRetrieveRsp) { +// sem_wait(&pSql->rspSem); - tscFreeSqlObj(pSql); - tscTrace("%p sqlObj is freed by app", pSql); - } else { +// tscFreeSqlObj(pSql); +// tscTrace("%p sqlObj is freed by app", pSql); +// } else { tscTrace("%p sqlObj will be freed while rsp received", pSql); - } +// } return true; }