Hi Steph,

I have no idea what is wrong with optimized class/functions tables cleanup.
In case if EG(full_tables_cleanup) is set, the behavior should be exactly
the same as before patch.
PHP uses EG(full_table_cleanup) only for dl(), but I do't know how php-gtk
uses it.

Thanks. Dmitry.

> -----Original Message-----
> From: Steph Fox [mailto:[EMAIL PROTECTED] 
> Sent: Monday, May 29, 2006 1:40 PM
> To: internals
> Cc: PHP-GTK dev; Dmitry Stogov
> Subject: [PHP-DEV] Ides of March [WAS: tsrm_shutdown() and 
> the CLI SAPI]
> 
> 
> 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
> 
> 
> 

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

Reply via email to