diff options
author | Nikita Popov <nikic@php.net> | 2014-03-21 01:32:49 +0100 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2014-03-21 01:32:49 +0100 |
commit | f331ed14143e78afe409018b00b19b05ed35c122 (patch) | |
tree | 8d694e05b1cca66a31e24832c9bfa17cf315c3cf | |
parent | 4e7e301dda2fa081c1310279b027a2350c05801e (diff) | |
download | php-git-f331ed14143e78afe409018b00b19b05ed35c122.tar.gz |
Revert "Add helper function for updating bucket contents"
Reverting this for now, because it would require further changes
thanks to the zend signals tsrms-but-only-sometimes awesomeness.
-rw-r--r-- | Zend/zend_hash.c | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index aa3587c675..135d3c3fa3 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -141,21 +141,6 @@ ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength) static const Bucket *uninitialized_bucket = NULL; -static inline void zend_hash_bucket_update( - const HashTable *ht, Bucket *p, void *pData, uint nDataSize, void **pDest ZEND_FILE_LINE_DC -) { - ZEND_ASSERT(p->pData != pData); - HANDLE_BLOCK_INTERRUPTIONS(); - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - UPDATE_DATA(ht, p, pData, nDataSize); - HANDLE_UNBLOCK_INTERRUPTIONS(); - if (pDest) { - *pDest = p->pData; - } -} - static zend_always_inline void i_zend_hash_bucket_delete(HashTable *ht, Bucket *p) { #ifdef ZEND_SIGNALS @@ -269,14 +254,21 @@ ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKe p = ht->arBuckets[nIndex]; while (p != NULL) { if (p->arKey == arKey || - ((p->h == h) && (p->nKeyLength == nKeyLength) - && !memcmp(p->arKey, arKey, nKeyLength)) - ) { - if (flag & HASH_ADD) { - return FAILURE; - } - zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); - return SUCCESS; + ((p->h == h) && (p->nKeyLength == nKeyLength) && !memcmp(p->arKey, arKey, nKeyLength))) { + if (flag & HASH_ADD) { + return FAILURE; + } + ZEND_ASSERT(p->pData != pData); + HANDLE_BLOCK_INTERRUPTIONS(); + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + UPDATE_DATA(ht, p, pData, nDataSize); + if (pDest) { + *pDest = p->pData; + } + HANDLE_UNBLOCK_INTERRUPTIONS(); + return SUCCESS; } p = p->pNext; } @@ -325,14 +317,21 @@ ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, ui p = ht->arBuckets[nIndex]; while (p != NULL) { if (p->arKey == arKey || - ((p->h == h) && (p->nKeyLength == nKeyLength) - && !memcmp(p->arKey, arKey, nKeyLength)) - ) { - if (flag & HASH_ADD) { - return FAILURE; - } - zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); - return SUCCESS; + ((p->h == h) && (p->nKeyLength == nKeyLength) && !memcmp(p->arKey, arKey, nKeyLength))) { + if (flag & HASH_ADD) { + return FAILURE; + } + ZEND_ASSERT(p->pData != pData); + HANDLE_BLOCK_INTERRUPTIONS(); + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + UPDATE_DATA(ht, p, pData, nDataSize); + if (pDest) { + *pDest = p->pData; + } + HANDLE_UNBLOCK_INTERRUPTIONS(); + return SUCCESS; } p = p->pNext; } @@ -397,7 +396,16 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) { return FAILURE; } - zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); + ZEND_ASSERT(p->pData != pData); + HANDLE_BLOCK_INTERRUPTIONS(); + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + UPDATE_DATA(ht, p, pData, nDataSize); + HANDLE_UNBLOCK_INTERRUPTIONS(); + if (pDest) { + *pDest = p->pData; + } return SUCCESS; } p = p->pNext; |