On Mon, 13 Sep 2004 14:02:43 +0300 (IDT)
Stanislav Malyshev <[EMAIL PROTECTED]> wrote:

> AD>>ATM ZE2 calls destructor at the end of the request and no matter
> AD>is>there were a fatal error (which should probably stop executing
> AD>the>script). In some cases it leads to nasty segfaults (me and
> AD>report's>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.

Looks like you're right, but why others can't reproduce this segfault?

> What I would propose is to inhibit calling destructors after 
> shutdown_destructors() was finished. 

Sounds nice: we should not call destructors after they were already called =)

I could propose a simple solution: add a global flag, which will indicate 
that shutdown_destructors() was called, and do appropriate check in
zend_objects_store_del_ref().
Comments/objections?

-- 
Wbr, 
Antony Dovgal aka tony2001
[EMAIL PROTECTED] || [EMAIL PROTECTED]

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to