diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 9926c5a8c414ffdc684805d7b3efaa6dc9759fd7..57687717cbfe7510b692052981ea014cc1355a08 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -94,6 +94,7 @@ typedef struct SMetaEntry SMetaEntry; #define META_READER_NOLOCK 0x1 void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags); +void metaReaderReleaseLock(SMetaReader *pReader); void metaReaderClear(SMetaReader *pReader); int32_t metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid); int metaGetTableEntryByName(SMetaReader *pReader, const char *name); diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 1b5d25974e14e0facf3eff9e64c68556afa554ff..68abf9efd00a218058db3b59f1d1c56cdf64c016 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -24,6 +24,13 @@ void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags) { } } +void metaReaderReleaseLock(SMetaReader *pReader) { + if (pReader->pMeta && !(pReader->flags & META_READER_NOLOCK)) { + metaULock(pReader->pMeta); + pReader->flags |= META_READER_NOLOCK; + } +} + void metaReaderClear(SMetaReader *pReader) { if (pReader->pMeta && !(pReader->flags & META_READER_NOLOCK)) { metaULock(pReader->pMeta); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 0bc2705791306935cc614b8aa3a6193aa09ce26c..9ce767fd4b2140f65593aabeeb1944db79eaff7d 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -429,6 +429,8 @@ int32_t addTagPseudoColumnData(SReadHandle* pHandle, SExprInfo* pPseudoExpr, int return terrno; } + metaReaderReleaseLock(&mr); + for (int32_t j = 0; j < numOfPseudoExpr; ++j) { SExprInfo* pExpr = &pPseudoExpr[j];