ID: 35612 User updated by: alacn dot uhahaa at gmail dot com Reported By: alacn dot uhahaa at gmail dot com -Status: Feedback +Status: Open Bug Type: IIS related Operating System: Windows Server 2003 PHP Version: 5.1.1 Assigned To: dmitry New Comment:
ok.. here is udiff for latest cvs (php5.1) what is happenning is that since the thread that created the timeout thread have different access levels than the one that will wait it finish, waitforsingleobject on timeout thread handle wont work right, it will always timeout, and access violation will occur expected: it should return before the timeout, that way wont occur access violation the fix: it should wait at least 30 secs, waitforsingleobject will never elapse all the 30 secs, unless in a bad error, - it will always return before the 30 secs, as it should - btw ...cant php4 be fixed too? :( --- php5.1-200512200930_zend_execute_API.c Fri Dec 16 21:30:06 2005 +++ php5.1-200512200930_fixed_zend_execute_API.c Tue Dec 20 08:44:24 2005 @@ -46,7 +46,7 @@ static WNDCLASS wc; static HWND timeout_window; static HANDLE timeout_thread_event; -static HANDLE timeout_thread_handle; +static HANDLE timeout_thread_finish; static DWORD timeout_thread_id; static int timeout_thread_initialized=0; #endif @@ -1282,6 +1282,7 @@ } DestroyWindow(timeout_window); UnregisterClass(wc.lpszClassName, NULL); + SetEvent(timeout_thread_finish); return 0; } @@ -1289,7 +1290,8 @@ void zend_init_timeout_thread() { timeout_thread_event = CreateEvent(NULL, FALSE, FALSE, NULL); - timeout_thread_handle = _beginthreadex(NULL, 0, timeout_thread_proc, NULL, 0, &timeout_thread_id); + timeout_thread_finish = CreateEvent(0, 0, 0, 0); + _beginthreadex(NULL, 0, timeout_thread_proc, NULL, 0, &timeout_thread_id); WaitForSingleObject(timeout_thread_event, INFINITE); } @@ -1302,8 +1304,7 @@ PostThreadMessage(timeout_thread_id, WM_QUIT, 0, 0); /* Wait for thread termination */ - WaitForSingleObject(timeout_thread_handle, 5000); - CloseHandle(timeout_thread_handle); + WaitForSingleObject(timeout_thread_finish, 30000); } #endif Previous Comments: ------------------------------------------------------------------------ [2005-12-19 08:51:01] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.1-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.1-win32-latest.zip And this time, really make sure you have the right PHP installed. Only way to be sure is to delete ALL old dlls related to PHP. Especially from C:\windows\ directory. Also, make any patches against the latest CVS sources. PHP 4 is too old. ------------------------------------------------------------------------ [2005-12-13 11:15:11] alacn dot uhahaa at gmail dot com its not fixed in cvs (php5.1-200512130930) udiff for php4: --- php4.4.1_zend_execute_API.c Tue Aug 02 14:52:34 2005 +++ php4.4.1_fixed_zend_execute_API.c Tue Dec 13 08:11:36 2005 @@ -52,6 +52,7 @@ static HANDLE timeout_thread_event; static DWORD timeout_thread_id; static int timeout_thread_initialized=0; +static HANDLE timeout_thread_finish_event; // alacn #endif @@ -813,6 +814,9 @@ } DestroyWindow(timeout_window); UnregisterClass(wc.lpszClassName, NULL); + + SetEvent(timeout_thread_finish_event); // alacn + return 0; } @@ -820,6 +824,7 @@ void zend_init_timeout_thread() { timeout_thread_event = CreateEvent(NULL, FALSE, FALSE, NULL); + timeout_thread_finish_event = CreateEvent(0, 0, 0, 0); // alacn _beginthreadex(NULL, 0, timeout_thread_proc, NULL, 0, &timeout_thread_id); WaitForSingleObject(timeout_thread_event, INFINITE); } @@ -831,6 +836,8 @@ return; } PostThreadMessage(timeout_thread_id, WM_QUIT, 0, 0); + + WaitForSingleObject(timeout_thread_finish_event, 30000); // alacn } #endif ------------------------------------------------------------------------ [2005-12-13 09:13:43] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.1-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.1-win32-latest.zip ------------------------------------------------------------------------ [2005-12-12 19:46:58] [EMAIL PROTECTED] Reassigned to Dmitry. ------------------------------------------------------------------------ [2005-12-12 19:17:26] alacn dot uhahaa at gmail dot com at cvs its: timeout_thread_handle = _beginthreadex(..); and WaitForSingleObject(timeout_thread_handle, 5000); but this wont work right, because the thread that created the timeout_thread is not the same that will wait it finish, so, if you check, WaitForSingleObject will always result WAIT_OBJECT_TIMEOUT instead of WAIT_OBJECT_0 thats why it should wait using an event object instead of thread handle also, it should be at least 30 secs, because 5 secs is not enough, with an event object (instead of thread handle), it will finish before the 30 secs as it should be --- php5.1.1_zend_execute_API.c Thu Nov 24 09:33:12 2005 +++ php5.1.1_fixed_zend_execute_API.c Fri Dec 09 10:38:58 2005 @@ -48,6 +48,7 @@ static HANDLE timeout_thread_event; static DWORD timeout_thread_id; static int timeout_thread_initialized=0; +static HANDLE timeout_thread_finish_event; // alacn #endif #if ZEND_DEBUG @@ -1255,6 +1256,9 @@ } DestroyWindow(timeout_window); UnregisterClass(wc.lpszClassName, NULL); + + SetEvent(timeout_thread_finish_event); // alacn + return 0; } @@ -1262,6 +1266,7 @@ void zend_init_timeout_thread() { timeout_thread_event = CreateEvent(NULL, FALSE, FALSE, NULL); + timeout_thread_finish_event = CreateEvent(0, 0, 0, 0); // alacn _beginthreadex(NULL, 0, timeout_thread_proc, NULL, 0, &timeout_thread_id); WaitForSingleObject(timeout_thread_event, INFINITE); } @@ -1273,6 +1278,8 @@ return; } PostThreadMessage(timeout_thread_id, WM_QUIT, 0, 0); + + WaitForSingleObject(timeout_thread_finish_event, 30000); // alacn } #endif ------------------------------------------------------------------------ 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/35612 -- Edit this bug report at http://bugs.php.net/?id=35612&edit=1