[td-1569]
This commit is contained in:
parent
5b23931687
commit
00cc76aed9
|
@ -335,7 +335,7 @@ void *taosCacheTransfer(SCacheObj *pCacheObj, void **data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
|
void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
|
||||||
if (pCacheObj == NULL || taosHashGetSize(pCacheObj->pHashTable) + pCacheObj->numOfElemsInTrash == 0) {
|
if (pCacheObj == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,7 +343,12 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
|
||||||
uError("cache:%s, NULL data to release", pCacheObj->name);
|
uError("cache:%s, NULL data to release", pCacheObj->name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// The operation of removal from hash table and addition to trashcan is not an atomic operation,
|
||||||
|
// therefore the check for the empty of both the hash table and the trashcan has a race condition.
|
||||||
|
// It happens when there is only one object in the cache, and two threads which has referenced this object
|
||||||
|
// start to free the it simultaneously. [TD-1569]
|
||||||
size_t offset = offsetof(SCacheDataNode, data);
|
size_t offset = offsetof(SCacheDataNode, data);
|
||||||
|
|
||||||
SCacheDataNode *pNode = (SCacheDataNode *)((char *)(*data) - offset);
|
SCacheDataNode *pNode = (SCacheDataNode *)((char *)(*data) - offset);
|
||||||
|
|
Loading…
Reference in New Issue