From 08e7f480e15ed876f9722667756c046136434eb7 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Fri, 17 Sep 2004 10:19:47 +0000 Subject: [PATCH] MFH destructor failure fix --- 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 d0670314cc..73404e29fc 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -208,6 +208,9 @@ void shutdown_executor(TSRMLS_D) zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_deactivator TSRMLS_CC); zend_objects_store_call_destructors(&EG(objects_store) TSRMLS_CC); zend_hash_graceful_reverse_destroy(&EG(symbol_table)); + } 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(); zend_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