diff --git a/src/system/detail/src/vnodeShell.c b/src/system/detail/src/vnodeShell.c index f4b3cdbbe72a7adc2321987335f861ce9b2034c2..66bede89b74915a75762aca9f591b13f972f2167 100644 --- a/src/system/detail/src/vnodeShell.c +++ b/src/system/detail/src/vnodeShell.c @@ -529,9 +529,11 @@ static int vnodeDoSubmitJob(SVnodeObj *pVnode, int import, int32_t *ssid, int32_ int code = TSDB_CODE_SUCCESS; int32_t numOfPoints = 0; int32_t i = 0; + SShellSubmitBlock tBlock; for (i = *ssid; i < esid; i++) { numOfPoints = 0; + tBlock = *pBlocks; code = vnodeCheckSubmitBlockContext(pBlocks, pVnode); if (code != TSDB_CODE_SUCCESS) break; @@ -565,6 +567,13 @@ static int vnodeDoSubmitJob(SVnodeObj *pVnode, int import, int32_t *ssid, int32_ *ssid = i; *ppBlocks = pBlocks; + /* Since the pBlock part can be changed by the vnodeForwardToPeer interface, + * which is also possible to be used again. For that case, we just copy the original + * block content back. + */ + if (import && (code == TSDB_CODE_ACTION_IN_PROGRESS)) { + memcpy((void *)pBlocks, (void *)&tBlock, sizeof(SShellSubmitBlock)); + } return code; }