From 79ec0da132cccdf96fbba21fe15fde16729ef637 Mon Sep 17 00:00:00 2001 From: dmchen Date: Fri, 30 Aug 2024 04:10:26 +0000 Subject: [PATCH] fix/TD-31622-unlock-and-free-when-error --- source/dnode/mnode/sdb/src/sdbHash.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/dnode/mnode/sdb/src/sdbHash.c b/source/dnode/mnode/sdb/src/sdbHash.c index 60e6c1b81e..0e41e0732f 100644 --- a/source/dnode/mnode/sdb/src/sdbHash.c +++ b/source/dnode/mnode/sdb/src/sdbHash.c @@ -242,7 +242,12 @@ static int32_t sdbDeleteRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow * (void)atomic_add_fetch_32(&pOldRow->refCount, 1); sdbPrintOper(pSdb, pOldRow, "delete"); - TAOS_CHECK_RETURN(taosHashRemove(hash, pOldRow->pObj, keySize)); + if (taosHashRemove(hash, pOldRow->pObj, keySize) != 0) { + sdbUnLock(pSdb, type); + sdbFreeRow(pSdb, pRow, false); + terrno = TSDB_CODE_SDB_OBJ_NOT_THERE; + return terrno; + } pSdb->tableVer[pOldRow->type]++; sdbUnLock(pSdb, type);