- Run destructor before the hash structure is modified, thus, making

hash_del, reentrant (BLOCK_INTERRUPTIONS needs to be made a counter now).
This commit is contained in:
Andi Gutmans 2000-01-19 17:39:55 +00:00
parent 58fb1a3922
commit b7b97df93f

View File

@ -537,6 +537,9 @@ ZEND_API int zend_hash_del_key_or_index(HashTable *ht, char *arKey, uint nKeyLen
if ((p->h == h) && ((p->nKeyLength == 0) || /* Numeric index */
((p->nKeyLength == nKeyLength) && (!memcmp(p->arKey, arKey, nKeyLength))))) {
HANDLE_BLOCK_INTERRUPTIONS();
if (ht->pDestructor) {
ht->pDestructor(p->pData);
}
if (p == ht->arBuckets[nIndex]) {
ht->arBuckets[nIndex] = p->pNext;
} else {
@ -553,9 +556,6 @@ ZEND_API int zend_hash_del_key_or_index(HashTable *ht, char *arKey, uint nKeyLen
} else {
ht->pListTail = p->pListLast;
}
if (ht->pDestructor) {
ht->pDestructor(p->pData);
}
if (!p->pDataPtr) {
pefree(p->pData,ht->persistent);
}