ID: 16820 Updated by: j...@php.net -Summary: hangs in multithreaded environment (ZTS) Reported By: wmeler at wp-sa dot pl -Status: Open +Status: Assigned Bug Type: Scripting Engine problem Operating System: * (ZTS only) PHP Version: 5.*, 6, 7, 8.. -Assigned To: +Assigned To: dmitry New Comment:
Dmitry, now there's patch to fix this. Previous Comments: ------------------------------------------------------------------------ [2009-05-11 10:40:31] wmeler at wp-sa dot pl Following patch solves the problem. diff -urN php-5.3.0RC1/Zend/zend_config.h php-5.3.0RC1/Zend/zend_config.h --- php-5.3.0RC1/Zend/zend_config.h 1970-01-01 01:00:00.000000000 +0100 +++ php-5.3.0RC1/Zend/zend_config.h 2009-05-11 11:40:05.408398000 +0200 @@ -0,0 +1,4 @@ +#include <../main/php_config.h> +#if defined(APACHE) && defined(PHP_API_VERSION) +#undef HAVE_DLFCN_H +#endif diff -urN php-5.3.0RC1/Zend/zend_execute_API.c php-5.3.0RC1/Zend/zend_execute_API.c --- php-5.3.0RC1/Zend/zend_execute_API.c 2009-03-19 19:34:16.000000000 +0100 +++ php-5.3.0RC1/Zend/zend_execute_API.c 2009-05-11 11:01:28.663182000 +0200 @@ -185,7 +185,7 @@ zend_objects_store_init(&EG(objects_store), 1024); EG(full_tables_cleanup) = 0; -#ifdef ZEND_WIN32 +#if defined(ZEND_WIN32) || defined(ZTS) EG(timed_out) = 0; #endif @@ -1280,6 +1280,15 @@ } /* }}} */ +static void zend_timeout_signal_proc (int dummy) { + TSRMLS_FETCH(); +#ifdef ZTS + EG(timed_out) = 1; +#else + zend_timeout(0); +#endif +} + #ifdef ZEND_WIN32 static LRESULT CALLBACK zend_timeout_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) /* {{{ */ { @@ -1424,7 +1433,7 @@ setitimer(ITIMER_REAL, &t_r, NULL); } if(reset_signals) { - signal(SIGALRM, zend_timeout); + signal(SIGALRM, zend_timeout_signal_proc`); sigemptyset(&sigset); sigaddset(&sigset, SIGALRM); } @@ -1432,7 +1441,7 @@ setitimer(ITIMER_PROF, &t_r, NULL); } if(reset_signals) { - signal(SIGPROF, zend_timeout); + signal(SIGPROF, zend_timeout_signal_proc); sigemptyset(&sigset); sigaddset(&sigset, SIGPROF); } diff -urN php-5.3.0RC1/Zend/zend_globals.h php-5.3.0RC1/Zend/zend_globals.h --- php-5.3.0RC1/Zend/zend_globals.h 2009-03-18 11:18:09.000000000 +0100 +++ php-5.3.0RC1/Zend/zend_globals.h 2009-05-11 10:50:10.810172000 +0200 @@ -213,8 +213,10 @@ /* for extended information support */ zend_bool no_extensions; -#ifdef ZEND_WIN32 +#if defined(ZEND_WIN32)||defined(ZTS) zend_bool timed_out; +#endif +#ifdef ZEND_WIN32 OSVERSIONINFOEX windows_version_info; #endif diff -urN php-5.3.0RC1/Zend/zend_vm_execute.h php-5.3.0RC1/Zend/zend_vm_execute.h --- php-5.3.0RC1/Zend/zend_vm_execute.h 2009-03-18 19:49:27.000000000 +0100 +++ php-5.3.0RC1/Zend/zend_vm_execute.h 2009-05-11 10:48:32.487352000 +0200 @@ -95,7 +95,7 @@ while (1) { int ret; -#ifdef ZEND_WIN32 +#if defined(ZEND_WIN32) || defined(ZTS) if (EG(timed_out)) { zend_timeout(0); } diff -urN php-5.3.0RC1/Zend/zend_vm_execute.skl php-5.3.0RC1/Zend/zend_vm_execute.skl --- php-5.3.0RC1/Zend/zend_vm_execute.skl 2008-06-11 15:18:41.000000000 +0200 +++ php-5.3.0RC1/Zend/zend_vm_execute.skl 2009-05-11 10:48:59.796813000 +0200 @@ -61,7 +61,7 @@ while (1) { {%ZEND_VM_CONTINUE_LABEL%} -#ifdef ZEND_WIN32 +#if defined(ZEND_WIN32) || defined(ZTS) if (EG(timed_out)) { zend_timeout(0); } ------------------------------------------------------------------------ [2009-03-11 09:14:58] wmeler at wp-sa dot pl What should I say to make you stop using longjmp family calls in signal handler? IT IS NOT THREAD SAFE !!! You probably can reproduce it with: ./configure --enable-maintainer-zts; make; sapi/cli/php ../aaa.php Fatal error: Maximum execution time of 1 second exceeded in /root/aaa.php on line 7 6504146zend_mm_heap corrupted aaa.php is a script posted 21 Jul 2003 2:07am UTC. ------------------------------------------------------------------------ [2009-03-10 15:38:56] ka...@php.net Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://windows.php.net/snapshots/ Can you try a recent snapshot? I cannot reproduce this under CLI on Ubuntu (5.3.0b1) or Windows (5.2.8) with ZTS ------------------------------------------------------------------------ [2004-01-27 03:33:31] wmeler at wp-sa dot pl Zeev corrected #21513. It won't help. As long as zend_timeout calls longjmp (through zend_error, php_error_cb and zend_bailout) shutdown functions can get memory, locks - any objects in undefined state. 2 years - no change ... ------------------------------------------------------------------------ [2003-08-13 21:43:09] sni...@php.net I could finally reproduce this. The patches didn't make any difference. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/16820 -- Edit this bug report at http://bugs.php.net/?id=16820&edit=1