From 3755c03291a5f956b0b72a5f613d9f21554f5e24 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Fri, 17 Sep 2004 10:13:52 +0000 Subject: [PATCH] fix crash when dtor is fialing on shutdown --- Zend/zend_execute_API.c | 3 +++ Zend/zend_objects_API.c | 10 ++++++++++ Zend/zend_objects_API.h | 1 + 3 files changed, 14 insertions(+) diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index f3864cfca6..413a7f8b05 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -190,6 +190,9 @@ void init_executor(TSRMLS_D) void shutdown_destructors(TSRMLS_D) { zend_try { zend_objects_store_call_destructors(&EG(objects_store) TSRMLS_CC); + } zend_catch { + /* if we couldn't destruct cleanly, mark all objects as destructed anyway */ + zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC); } zend_end_try(); } diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c index 33225da4db..6aa2d80b56 100644 --- a/Zend/zend_objects_API.c +++ b/Zend/zend_objects_API.c @@ -58,6 +58,16 @@ ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TS } } +ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects TSRMLS_DC) +{ + zend_uint i = 1; + + for (i = 1; i < objects->top ; i++) { + if (objects->object_buckets[i].valid) { + objects->object_buckets[i].destructor_called = 1; + } + } +} ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects TSRMLS_DC) { diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h index 189ab9c5ec..02701941f2 100644 --- a/Zend/zend_objects_API.h +++ b/Zend/zend_objects_API.h @@ -57,6 +57,7 @@ typedef struct _zend_objects_store { BEGIN_EXTERN_C() ZEND_API void zend_objects_store_init(zend_objects_store *objects, zend_uint init_size); ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TSRMLS_DC); +ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects TSRMLS_DC); ZEND_API void zend_objects_store_destroy(zend_objects_store *objects); /* Store API functions */ -- 2.40.0