ID: 16820
Updated by: [email protected]
-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] [email protected]
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] [email protected]
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