Hi,

Yes, something broke while we were at 5.1.3-dev.

It would be really nice if Dmitry could have a look at this. We have
many reports that things have gotten much more ustable on Windows since
5.1.2.

Edin


Steph Fox wrote:
> Hi all,
> 
> I've spent a fun weekend debugging TSRM and bits of ZE2, having finally
> figured that the zend_compiler_globals dtor was the point of failure here.
> 
> TSRM needs to mark resources as 'done' following a free and doesn't in
> most cases, but that's actually not the main problem we have in PHP-GTK
> (although fixing it may well solve everybody else's, I'll check that on
> my travels).
> 
> Dmitry's "Optimized cleanup loops on request shutdown" commit(s)
> spanning the 13th and 14th March broke Andrei's 'EG(full_tables_cleanup)
> = 1' ruse (we needed user classes to be cleaned and internal classes to
> stay), but it also broke TSRM shutdown completely for us. PHP-GTK
> classes are recognized as being internal, but only the first one ever
> reaches the dtor - even when there are no user-defined classes.
> 
> zend_hash_reverse_apply() is called at that point, so I'm guessing
> there's a reentrancy issue behind my access violation crash.
> 
> I'll get back to this when I get some time, in the meantime if anyone
> (Dmitry?) wants to play with this you need to know that I can't put the
> 5_2 compat stuff into CVS until Andrei OKs it, so PHP-GTK HEAD has to be
> built against PHP_5_1 branch at present (anything after March 14th will
> do).
> 
> - Steph
> 
> 
>> Under CLI ZTS build, when loading a PHP-GTK 2 .dll built against
>> anything this side of PHP 5.1.2 release, I'm seeing an 'access
>> violation' crash on reaching:
>>
>>      if (resource_types_table && !resource_types_table[j].done &&
>> resource_types_table[j].dtor) {
>>          resource_types_table[j].dtor(p->storage[j], &p->storage);
>>      }
>>
>> Similar code is also used in:
>>
>> tsrm_free_interpreter_context()
>> ts_free_thread()
>> ts_free_worker_threads()
>> ts_free_id()
>>
>> I thought ts_free_thread() was crashing at that line too at first, but
>> that turned out to be because there's no 'done' check there, i.e.
>> double dtors are possible via some functions. It's still vaguely
>> possible there's a double flypast causing the crash I'm seeing, but I
>> have everything I know about protected now. (On my laptop that is.)
>>
>> Eventually I found the resource id for PHP-GTK - the only extension
>> I'm loading during runtime, via php.ini - is 32nd out of a possible
>> 32. "Eventually", because that means I can't use ts_free_id() to avoid
>> the crash as advised by Frank (and Tony, and Dmitry, and anyone else
>> who ever used that MSHUTDOWN workaround for CLI). Interesting too,
>> because the resource that causes the crash appears to be something
>> completely other. Tracking down resource id #5 - and that's all I know
>> about it apart from it crashes - is a barrel of laughs, I'll let y'all
>> know if I ever find out which of the many possible extensions/files in
>> ext/standard or core it is.
>>
>> Short version: One line is problematic, and only in one function, and
>> presumably only under CLI SAPI. (CGI already doesn't call
>> tsrm_shutdown(), thanks to similar issues some 3 years ago).
>>
>> The question is whether to take 'the Zeev approach' and simply comment
>> out the tsrm_shutdown() call at the end of sapi/cli/php_cli.c, or
>> whether to spend time knitting up a fine-grained approach to prevent
>> the one bad line in the function from being called in single-threaded
>> environments? I think I've given up on the idea of actually resolving
>> the bug now...
>>
>> Thoughts?
>>
>> - oh, and don't make one of them 'chicken-and-egg' - this is
>> definitively NOT related to the shutdown order in main.c!!!!!
>>
>> - Steph
>>
>> -- 
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
>> __________ NOD32 1.1380 (20060125) Information __________
>>
>> This message was checked by NOD32 antivirus system.
>> http://www.eset.com
>>
>>
> 

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

Reply via email to