diff --git a/src/client/src/tscProfile.c b/src/client/src/tscProfile.c index bfc3b9f0be1cedfe1e7c3d66f1fa3ab16f5d37f3..d2fdc2fc93f2e86d181df2734aea1eb5026a1edf 100644 --- a/src/client/src/tscProfile.c +++ b/src/client/src/tscProfile.c @@ -283,6 +283,17 @@ int tscBuildQueryStreamDesc(void *pMsg, STscObj *pObj) { pthread_mutex_lock(&pSql->subState.mutex); if (pSql->pSubs != NULL && pSql->subState.states != NULL) { for (int32_t i = 0; i < pQdesc->numOfSub; ++i) { + // because subState maybe free on anytime by any thread, check validate from here + if(pSql->subState.numOfSub != pQdesc->numOfSub || + pSql->pSubs == NULL || + pSql->subState.states == NULL) { + tscError(" QUERY-HEART STscObj=%p subState maybe free. numOfSub=%d pSubs=%p states=%p", + pObj, pSql->subState.numOfSub, pSql->pSubs, pSql->subState.states); + pQdesc->numOfSub = 0; + // break for + break; + } + SSqlObj *psub = pSql->pSubs[i]; int64_t self = (psub != NULL)? psub->self : 0;