Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:23724 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 40079 invoked by uid 1010); 27 May 2006 18:48:15 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 40064 invoked from network); 27 May 2006 18:48:15 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 27 May 2006 18:48:15 -0000 X-PHP-List-Original-Sender: steph@zend.com X-Host-Fingerprint: 192.38.9.232 gw2.emini.dk Linux 2.4/2.6 Received: from ([192.38.9.232:12641] helo=gw2.emini.dk) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id AB/A0-17316-EEE98744 for ; Sat, 27 May 2006 14:48:14 -0400 Received: from foxbox (IGLD-84-228-79-24.inter.net.il [84.228.79.24]) by gw2.emini.dk (Postfix) with ESMTP id 0C848B3B6F for ; Sat, 27 May 2006 20:48:10 +0200 (CEST) Message-ID: <11b601c681bd$c1fc3050$6602a8c0@foxbox> Reply-To: "Steph Fox" To: "internals" Date: Sat, 27 May 2006 20:45:41 +0200 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.2180 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 Subject: tsrm_shutdown() and the CLI SAPI From: steph@zend.com ("Steph Fox") 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