mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fixed segfault in Zend/tests/008.phpt
This commit is contained in:
parent
b917458490
commit
cc15eb500e
2 changed files with 8 additions and 2 deletions
|
@ -140,6 +140,12 @@ END_EXTERN_C()
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define GC_REMOVE_ZOBJ_FROM_BUFFER(z) do { \
|
||||||
|
if (GC_ADDRESS((z)->gc.u.v.buffer)) { \
|
||||||
|
gc_remove_zval_from_buffer(&(z)->gc TSRMLS_CC); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
static zend_always_inline void gc_zval_check_possible_root(zval *z TSRMLS_DC)
|
static zend_always_inline void gc_zval_check_possible_root(zval *z TSRMLS_DC)
|
||||||
{
|
{
|
||||||
if (Z_TYPE_P(z) == IS_ARRAY || Z_TYPE_P(z) == IS_OBJECT) {
|
if (Z_TYPE_P(z) == IS_ARRAY || Z_TYPE_P(z) == IS_OBJECT) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TS
|
||||||
obj->gc.refcount--;
|
obj->gc.refcount--;
|
||||||
|
|
||||||
if (obj->gc.refcount == 0) {
|
if (obj->gc.refcount == 0) {
|
||||||
gc_remove_zval_from_buffer((zend_refcounted*)obj TSRMLS_CC);
|
GC_REMOVE_ZOBJ_FROM_BUFFER(obj TSRMLS_CC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects
|
||||||
zend_object *obj = objects->object_buckets[i];
|
zend_object *obj = objects->object_buckets[i];
|
||||||
|
|
||||||
if (IS_VALID(obj)) {
|
if (IS_VALID(obj)) {
|
||||||
gc_remove_zval_from_buffer((zend_refcounted*)obj TSRMLS_CC);
|
GC_REMOVE_ZOBJ_FROM_BUFFER(obj TSRMLS_CC);
|
||||||
objects->object_buckets[i] = SET_INVALID(obj);
|
objects->object_buckets[i] = SET_INVALID(obj);
|
||||||
if (obj->handlers->free_obj) {
|
if (obj->handlers->free_obj) {
|
||||||
obj->handlers->free_obj(obj TSRMLS_CC);
|
obj->handlers->free_obj(obj TSRMLS_CC);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue