Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:12756 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 53404 invoked by uid 1010); 13 Sep 2004 11:02:45 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 53340 invoked from network); 13 Sep 2004 11:02:44 -0000 Received: from unknown (HELO mail.zend.com) (80.74.107.235) by pb1.pair.com with SMTP; 13 Sep 2004 11:02:44 -0000 Received: (qmail 11905 invoked from network); 13 Sep 2004 11:02:43 -0000 Received: from shire.zend.office (10.1.2.160) by int.zend.com with SMTP; 13 Sep 2004 11:02:43 -0000 Date: Mon, 13 Sep 2004 14:02:43 +0300 (IDT) X-X-Sender: frodo@shire.zend.office To: Antony Dovgal cc: php-dev In-Reply-To: <20040910095725.257bcb8e.tony2001@phpclub.net> Message-ID: References: <20040910095725.257bcb8e.tony2001@phpclub.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: Re: [PHP-DEV] [patch] Zend/zend_objects_API.c - bug #29980 (segfault while executing __destruct()) From: stas@zend.com (Stanislav Malyshev) AD>>ATM ZE2 calls destructor at the end of the request and no matter is AD>>there were a fatal error (which should probably stop executing the AD>>script). In some cases it leads to nasty segfaults (me and report's AD>>author can reproduce it, but others can't. weird..). Well, the cause of the faults is as follows: If we are in shutdown, and one of the destructors fails with fatal error, then other destructors for other objects are not called. Thus, their if they hold some objects, destructors for these objects will not be called. Later, when the storage is cleaned with zend_objects_store_free_object_storage(), engine will attempt to call dtors for objects that didn't have their dtors called before. However, on that stage engine is already unable to run PHP code (function and class tables are already cleaned, etc.) - so it crashes. What I would propose is to inhibit calling destructors after shutdown_destructors() was finished. -- Stanislav Malyshev, Zend Products Engineer stas@zend.com http://www.zend.com/ +972-3-6139665 ext.115