mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Micro-optimizations for WeakMap
Skip WeakMap lookup check used only for debug assertion in non-debug builds Use the `zend_hash_lookup` helper to optimize adding a WeakMap entry if the entry doesn't already exist. Closes GH-7670
This commit is contained in:
parent
636e54a1cb
commit
b6419f919a
1 changed files with 8 additions and 6 deletions
|
@ -87,9 +87,9 @@ static void zend_weakref_register(zend_object *object, void *payload) {
|
||||||
GC_ADD_FLAGS(object, IS_OBJ_WEAKLY_REFERENCED);
|
GC_ADD_FLAGS(object, IS_OBJ_WEAKLY_REFERENCED);
|
||||||
|
|
||||||
zend_ulong obj_addr = (zend_ulong) object;
|
zend_ulong obj_addr = (zend_ulong) object;
|
||||||
zval *zv = zend_hash_index_find(&EG(weakrefs), obj_addr);
|
zval *zv = zend_hash_index_lookup(&EG(weakrefs), obj_addr);
|
||||||
if (!zv) {
|
if (Z_TYPE_P(zv) == IS_NULL) {
|
||||||
zend_hash_index_add_new_ptr(&EG(weakrefs), obj_addr, payload);
|
ZVAL_PTR(zv, payload);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,9 +127,11 @@ static void zend_weakref_unregister(zend_object *object, void *payload) {
|
||||||
}
|
}
|
||||||
|
|
||||||
HashTable *ht = ptr;
|
HashTable *ht = ptr;
|
||||||
tagged_ptr = zend_hash_index_find_ptr(ht, (zend_ulong) payload);
|
#if ZEND_DEBUG
|
||||||
ZEND_ASSERT(tagged_ptr && "Weakref not registered?");
|
void *old_payload = zend_hash_index_find_ptr(ht, (zend_ulong) payload);
|
||||||
ZEND_ASSERT(tagged_ptr == payload);
|
ZEND_ASSERT(old_payload && "Weakref not registered?");
|
||||||
|
ZEND_ASSERT(old_payload == payload);
|
||||||
|
#endif
|
||||||
zend_hash_index_del(ht, (zend_ulong) payload);
|
zend_hash_index_del(ht, (zend_ulong) payload);
|
||||||
if (zend_hash_num_elements(ht) == 0) {
|
if (zend_hash_num_elements(ht) == 0) {
|
||||||
GC_DEL_FLAGS(object, IS_OBJ_WEAKLY_REFERENCED);
|
GC_DEL_FLAGS(object, IS_OBJ_WEAKLY_REFERENCED);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue