Re: ISAPI Crash Debugging Notes
| From: | Andi Gutmans | Date: | Sun, 01 Sep 2002 19:21:18 +0000 |
| Subject: | Re: ISAPI Crash Debugging Notes | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-87706@lists.php.net to get a copy of this message | ||
Any chance you can setup and Engine 2 build and see if this problem persists?
Andi
At 06:42 AM 8/27/2002 -0700, Michael Sisolak wrote:
--- Zeev Suraski <zeev@zend.com> wrote: At 09:53 27/08/2002, Michael Sisolak wrote:underi've been doing some debugging of the crashes when running phpyouthe isapi sapi. is anybody else currently looking at this? ifalsozeev, i believe that i may have tracked down a major isapi filter thread-safety hole. if i understand what zend_startup() is doing correctly, it assumes that the thread that it runs under will notare let's talk - here are my notes so far.first off, can you try using http://www.php.net/~zeev/php-4.2.3rc1.tar.gz and see if you experience the same problems? i've made some thread-safety related fixes there, even though none should lead to a hard crash...be used to serve http requests.No, the startup thread can be used as a regular HTTP thread, nothing in the code should prevent that. The globals code in the startup sequence is very tricky, but it should work. This is a sample of the debug output that I'm seeing (this is PHP 4.2.1 running under Windows 2000 Professional, single CPU): [1948] the startup thread is 1956 [1948] GLOBAL_FUNCTION_TABLE is 4226120 [1948] in HttpExtensionProc thread 1956, CG(function_table) is 4226120 [1948] in HttpExtensionProc thread 1520, CG(function_table) is 18834536 [1948] in HttpExtensionProc thread 920, CG(function_table) is 18838912 [1948] in HttpExtensionProc thread 1956, CG(function_table) is 4226120 [1948] in HttpExtensionProc thread 1256, CG(function_table) is 19250808 [1948] in HttpExtensionProc thread 920, CG(function_table) is 18838912 [1948] in HttpExtensionProc thread 1956, CG(function_table) is 4226120 Notice that the initial thread (1956) appears to continue to use GLOBAL_FUNCTION_TABLE as it's own CG(function_table). I'm reporting the GLOBAL_FUNCTION_TABLE value from within zend_startup() - is there some point later in the code that makes it okay that this is the same value that I get for a CG(function_table) later? Either way - starting threads from an ISAPI filter/extension is completely forbidden (or at least strongly discouraged) so even if there is some bug in there, starting our own thread is not an option. I don't believe that this is true. In this sample on MSDN: http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q197728 their code for GetExtensionVersion calls AfxBeginThread. Also in this document: http://msdn.microsoft.com/library/en-us/vccore/html/vcconatlserverandcom.asp point 1 recommends "Create your own thread in GetExtensionVersion on which you can initialize COM..." Can you give me the data I mentioned in the previous letter? This is PHP 4.2.1 running under Windows 2000 Professional (SP3) on a single CPU system. I can't really send the code as I'm currently testing with a large application that I have been running under CGI. I'll see if I can come up with a simpler example that causes the crash, but the debug output above would be the same either way. Please let me know if there is anything else I can provide to help in tracking this down. Michael Sisolak msisolak@gvpi.com __________________________________________________ Do You Yahoo!? Yahoo! Finance - Get real-time stock quotes http://finance.yahoo.com -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php