From 40c7208cc2ab92d7c45a999764730d49902f97a5 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 19 Oct 2020 09:53:20 +0800 Subject: [PATCH] [td-225] --- src/query/src/qExecutor.c | 1 + src/vnode/src/vnodeRead.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index b9a5295ed2..f6c2ce29d6 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -6229,6 +6229,7 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGrou pQInfo->dataReady = QUERY_RESULT_NOT_READY; pQInfo->rspContext = NULL; pthread_mutex_init(&pQInfo->lock, NULL); + tsem_init(&pQInfo->ready, 0, 0); pQuery->pos = -1; pQuery->window = pQueryMsg->window; diff --git a/src/vnode/src/vnodeRead.c b/src/vnode/src/vnodeRead.c index ede5921dc1..9c3fc1c7da 100644 --- a/src/vnode/src/vnodeRead.c +++ b/src/vnode/src/vnodeRead.c @@ -272,6 +272,11 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) { if (pRetrieve->free == 1) { vWarn("vgId:%d, QInfo:%p, retrieve msg received to kill query and free qhandle", pVnode->vgId, *handle); qKillQuery(*handle); +#if !(_NON_BLOCKING_RETRIEVE) + void** p = handle; + qReleaseQInfo(pVnode->qMgmt, (void **)&p, false); +#endif + qReleaseQInfo(pVnode->qMgmt, (void **)&handle, true); vnodeBuildNoResultQueryRsp(pRet); @@ -285,6 +290,12 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) { pReadMsg->rpcMsg.handle); code = TSDB_CODE_RPC_NETWORK_UNAVAIL; qKillQuery(*handle); + +#if !(_NON_BLOCKING_RETRIEVE) + void** p = handle; + qReleaseQInfo(pVnode->qMgmt, (void **)&p, false); +#endif + qReleaseQInfo(pVnode->qMgmt, (void **)&handle, true); return code; } @@ -314,6 +325,11 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) { code = vnodeDumpQueryResult(pRet, pVnode, handle, &freeHandle, pReadMsg->rpcMsg.ahandle); } +#if !(_NON_BLOCKING_RETRIEVE) + void** p = handle; + qReleaseQInfo(pVnode->qMgmt, (void **)&p, false); +#endif + // If qhandle is not added into vread queue, the query should be completed already or paused with error. // Here free qhandle immediately if (freeHandle) { -- GitLab