fix double free in sma
This commit is contained in:
parent
ae294b98c2
commit
7ade2b3b8d
|
@ -479,6 +479,9 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
tqInitDataRsp(&dataRsp, pReq, pHandle->execHandle.subType);
|
tqInitDataRsp(&dataRsp, pReq, pHandle->execHandle.subType);
|
||||||
tqScanData(pTq, pHandle, &dataRsp, &fetchOffsetNew);
|
tqScanData(pTq, pHandle, &dataRsp, &fetchOffsetNew);
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
|
||||||
|
#endif
|
||||||
if (tqSendDataRsp(pTq, pMsg, pReq, &dataRsp) < 0) {
|
if (tqSendDataRsp(pTq, pMsg, pReq, &dataRsp) < 0) {
|
||||||
code = -1;
|
code = -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,14 +49,19 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
|
||||||
|
|
||||||
SStreamScanInfo* pInfo = pOperator->info;
|
SStreamScanInfo* pInfo = pOperator->info;
|
||||||
|
|
||||||
|
#if 0
|
||||||
// TODO: if a block was set but not consumed,
|
// TODO: if a block was set but not consumed,
|
||||||
// prevent setting a different type of block
|
// prevent setting a different type of block
|
||||||
pInfo->validBlockIndex = 0;
|
pInfo->validBlockIndex = 0;
|
||||||
/*if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) {*/
|
if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) {
|
||||||
/*taosArrayClearP(pInfo->pBlockLists, taosMemoryFree);*/
|
taosArrayClearP(pInfo->pBlockLists, taosMemoryFree);
|
||||||
/*} else {*/
|
} else {
|
||||||
taosArrayClear(pInfo->pBlockLists);
|
taosArrayClear(pInfo->pBlockLists);
|
||||||
/*}*/
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ASSERT(pInfo->validBlockIndex == 0);
|
||||||
|
ASSERT(taosArrayGetSize(pInfo->pBlockLists) == 0);
|
||||||
|
|
||||||
if (type == STREAM_INPUT__MERGED_SUBMIT) {
|
if (type == STREAM_INPUT__MERGED_SUBMIT) {
|
||||||
// ASSERT(numOfBlocks > 1);
|
// ASSERT(numOfBlocks > 1);
|
||||||
|
@ -79,17 +84,15 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
|
||||||
} else if (type == STREAM_INPUT__DATA_BLOCK) {
|
} else if (type == STREAM_INPUT__DATA_BLOCK) {
|
||||||
for (int32_t i = 0; i < numOfBlocks; ++i) {
|
for (int32_t i = 0; i < numOfBlocks; ++i) {
|
||||||
SSDataBlock* pDataBlock = &((SSDataBlock*)input)[i];
|
SSDataBlock* pDataBlock = &((SSDataBlock*)input)[i];
|
||||||
taosArrayPush(pInfo->pBlockLists, &pDataBlock);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// TODO optimize
|
// TODO optimize
|
||||||
SSDataBlock* p = createOneDataBlock(pDataBlock, false);
|
SSDataBlock* p = createOneDataBlock(pDataBlock, false);
|
||||||
|
/*qError("alloc p i, %d %p", i, p);*/
|
||||||
p->info = pDataBlock->info;
|
p->info = pDataBlock->info;
|
||||||
|
|
||||||
taosArrayClear(p->pDataBlock);
|
taosArrayClear(p->pDataBlock);
|
||||||
taosArrayAddAll(p->pDataBlock, pDataBlock->pDataBlock);
|
taosArrayAddAll(p->pDataBlock, pDataBlock->pDataBlock);
|
||||||
taosArrayPush(pInfo->pBlockLists, &p);
|
taosArrayPush(pInfo->pBlockLists, &p);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
pInfo->blockType = STREAM_INPUT__DATA_BLOCK;
|
pInfo->blockType = STREAM_INPUT__DATA_BLOCK;
|
||||||
} else {
|
} else {
|
||||||
|
@ -103,6 +106,7 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
|
||||||
static FORCE_INLINE void streamInputBlockDataDestory(void* pBlock) { blockDataDestroy((SSDataBlock*)pBlock); }
|
static FORCE_INLINE void streamInputBlockDataDestory(void* pBlock) { blockDataDestroy((SSDataBlock*)pBlock); }
|
||||||
|
|
||||||
void tdCleanupStreamInputDataBlock(qTaskInfo_t tinfo) {
|
void tdCleanupStreamInputDataBlock(qTaskInfo_t tinfo) {
|
||||||
|
#if 0
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
if (!pTaskInfo || !pTaskInfo->pRoot || pTaskInfo->pRoot->numOfDownstream <= 0) {
|
if (!pTaskInfo || !pTaskInfo->pRoot || pTaskInfo->pRoot->numOfDownstream <= 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -119,6 +123,7 @@ void tdCleanupStreamInputDataBlock(qTaskInfo_t tinfo) {
|
||||||
} else {
|
} else {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qSetMultiStreamInput(qTaskInfo_t tinfo, const void* pBlocks, size_t numOfBlocks, int32_t type) {
|
int32_t qSetMultiStreamInput(qTaskInfo_t tinfo, const void* pBlocks, size_t numOfBlocks, int32_t type) {
|
||||||
|
|
|
@ -920,6 +920,17 @@ _error:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doClearBufferedBlocks(SStreamScanInfo* pInfo) {
|
static void doClearBufferedBlocks(SStreamScanInfo* pInfo) {
|
||||||
|
if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) {
|
||||||
|
size_t total = taosArrayGetSize(pInfo->pBlockLists);
|
||||||
|
for (int32_t i = 0; i < total; i++) {
|
||||||
|
SSDataBlock* p = taosArrayGetP(pInfo->pBlockLists, i);
|
||||||
|
taosArrayDestroy(p->pDataBlock);
|
||||||
|
taosMemoryFree(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taosArrayClear(pInfo->pBlockLists);
|
||||||
|
pInfo->validBlockIndex = 0;
|
||||||
|
#if 0
|
||||||
size_t total = taosArrayGetSize(pInfo->pBlockLists);
|
size_t total = taosArrayGetSize(pInfo->pBlockLists);
|
||||||
|
|
||||||
pInfo->validBlockIndex = 0;
|
pInfo->validBlockIndex = 0;
|
||||||
|
@ -928,6 +939,7 @@ static void doClearBufferedBlocks(SStreamScanInfo* pInfo) {
|
||||||
blockDataDestroy(p);
|
blockDataDestroy(p);
|
||||||
}
|
}
|
||||||
taosArrayClear(pInfo->pBlockLists);
|
taosArrayClear(pInfo->pBlockLists);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isSessionWindow(SStreamScanInfo* pInfo) {
|
static bool isSessionWindow(SStreamScanInfo* pInfo) {
|
||||||
|
@ -1576,9 +1588,10 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
|
|
||||||
size_t total = taosArrayGetSize(pInfo->pBlockLists);
|
size_t total = taosArrayGetSize(pInfo->pBlockLists);
|
||||||
// TODO: refactor
|
// TODO: refactor
|
||||||
|
FETCH_NEXT_BLOCK:
|
||||||
if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) {
|
if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) {
|
||||||
if (pInfo->validBlockIndex >= total) {
|
if (pInfo->validBlockIndex >= total) {
|
||||||
/*doClearBufferedBlocks(pInfo);*/
|
doClearBufferedBlocks(pInfo);
|
||||||
/*pOperator->status = OP_EXEC_DONE;*/
|
/*pOperator->status = OP_EXEC_DONE;*/
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1613,7 +1626,11 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
generateDeleteResultBlock(pInfo, pDelBlock, pInfo->pDeleteDataRes);
|
generateDeleteResultBlock(pInfo, pDelBlock, pInfo->pDeleteDataRes);
|
||||||
pInfo->pDeleteDataRes->info.type = STREAM_DELETE_RESULT;
|
pInfo->pDeleteDataRes->info.type = STREAM_DELETE_RESULT;
|
||||||
printDataBlock(pDelBlock, "stream scan delete result");
|
printDataBlock(pDelBlock, "stream scan delete result");
|
||||||
return pInfo->pDeleteDataRes;
|
if (pInfo->pDeleteDataRes->info.rows > 0) {
|
||||||
|
return pInfo->pDeleteDataRes;
|
||||||
|
} else {
|
||||||
|
goto FETCH_NEXT_BLOCK;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pInfo->blockType = STREAM_INPUT__DATA_SUBMIT;
|
pInfo->blockType = STREAM_INPUT__DATA_SUBMIT;
|
||||||
pInfo->updateResIndex = 0;
|
pInfo->updateResIndex = 0;
|
||||||
|
@ -1626,7 +1643,11 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
if (pInfo->tqReader) {
|
if (pInfo->tqReader) {
|
||||||
blockDataDestroy(pDelBlock);
|
blockDataDestroy(pDelBlock);
|
||||||
}
|
}
|
||||||
return pInfo->pDeleteDataRes;
|
if (pInfo->pDeleteDataRes->info.rows > 0) {
|
||||||
|
return pInfo->pDeleteDataRes;
|
||||||
|
} else {
|
||||||
|
goto FETCH_NEXT_BLOCK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
default:
|
default:
|
||||||
|
@ -1691,6 +1712,7 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
while (1) {
|
while (1) {
|
||||||
if (pInfo->tqReader->pMsg == NULL) {
|
if (pInfo->tqReader->pMsg == NULL) {
|
||||||
if (pInfo->validBlockIndex >= totBlockNum) {
|
if (pInfo->validBlockIndex >= totBlockNum) {
|
||||||
|
doClearBufferedBlocks(pInfo);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5655,7 +5655,6 @@ static void doStreamIntervalAggImpl2(SOperatorInfo* pOperatorInfo, SSDataBlock*
|
||||||
TSKEY* tsCols = NULL;
|
TSKEY* tsCols = NULL;
|
||||||
SResultRow* pResult = NULL;
|
SResultRow* pResult = NULL;
|
||||||
int32_t forwardRows = 0;
|
int32_t forwardRows = 0;
|
||||||
int32_t aa = 4;
|
|
||||||
|
|
||||||
ASSERT(pSDataBlock->pDataBlock != NULL);
|
ASSERT(pSDataBlock->pDataBlock != NULL);
|
||||||
SColumnInfoData* pColDataInfo = taosArrayGet(pSDataBlock->pDataBlock, pInfo->primaryTsIndex);
|
SColumnInfoData* pColDataInfo = taosArrayGet(pSDataBlock->pDataBlock, pInfo->primaryTsIndex);
|
||||||
|
|
Loading…
Reference in New Issue