I'm down to four possible changes - I'm just going back through them with a full build, one by one. (Takes ages here.)

It could be anything at present... Dmitry, you're definitely off the hook over those optimizations though, promising though they seemed.

/me was hoping for something relatively obvious



Hello Steph,

 can it be that the return value of the dtor functions are wrong? They
have always been wrong and during last months we tried to sort things
out. Actually i was planning to have HEAD and 5.2 both respect the APPLY
values correct. Should i wait with those changes now until someone figures
out this dtor issue or go ahead and we look then?

best regards
marcus

Monday, May 29, 2006, 11:40:15 AM, you 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






Best regards,
Marcus

--
PHP-GTK Development Mailing List (http://gtk.php.net/)
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