From cc15eb500ed9c47412b41ee461cf7b4f00701ead Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Thu, 20 Feb 2014 16:21:41 +0800 Subject: [PATCH] Fixed segfault in Zend/tests/008.phpt --- Zend/zend_gc.h | 6 ++++++ Zend/zend_objects_API.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h index 2f3a399c99..f714033962 100644 --- a/Zend/zend_gc.h +++ b/Zend/zend_gc.h @@ -140,6 +140,12 @@ END_EXTERN_C() } \ } 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) { if (Z_TYPE_P(z) == IS_ARRAY || Z_TYPE_P(z) == IS_OBJECT) { diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c index 5bef2d4973..8e406ec715 100644 --- a/Zend/zend_objects_API.c +++ b/Zend/zend_objects_API.c @@ -55,7 +55,7 @@ ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TS obj->gc.refcount--; 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]; 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); if (obj->handlers->free_obj) { obj->handlers->free_obj(obj TSRMLS_CC); -- 2.49.0