Edit report at https://bugs.php.net/bug.php?id=62444&edit=1
ID: 62444
Comment by: krazyest at seznam dot cz
Reported by: sergio dot nalin at gmail dot com
Summary: Handle leak in is_readable
Status: Assigned
Type: Bug
Package: Filesystem function related
Operating System: Win 7 64bit
PHP Version: 5.3.14
Assigned To: pajoye
Block user comment: N
Private report: N
New Comment:
The problem is in TSRM\tsrm_win32.c in function
TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC)
A local variable
HANDLE thread_token;
is being initialized by this call
if(!OpenThreadToken(GetCurrentThread(), TOKEN_ALL_ACCESS, TRUE,
&thread_token)) {
which is likely to succeed, but even if it does not there is another call
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ALL_ACCESS, &thread_token)) {
that creates the handle.
However, no CloseHandle is called, which causes the handle to leak.
We need to change the code like this
HANDLE thread_token;
->
HANDLE thread_token=NULL;
Finished:
if(real_path != NULL) {
free(real_path);
real_path = NULL;
}
->
Finished:
if (thread_token) CloseHandle(thread_token);
if(real_path != NULL) {
free(real_path);
real_path = NULL;
}
Previous Comments:
------------------------------------------------------------------------
[2012-10-31 22:21:54] vseticka dot martin at gmail dot com
Is there any progress? This issue makes PHP really hard to use on Windows.
------------------------------------------------------------------------
[2012-07-26 17:24:41] mr_pain at operamail dot com
Memory leak confirmed for the following configurations:
PHP vc9 5.3.15, thread safe version + Apache Httpd 2.4.2 + Win XP SP3
PHP vc9 5.4.5, thread safe version + Apache Httpd 2.4.2 + Win XP SP3
Running Test script:
--------------------
for($i=0; $i<100;$i++) {
is_readable("c:\\temp");
}
PHP vc9 5.4.5 tested on WAMP stacks:
------------------------------------
XAMPP USB Lite 1.8.0 (Windows XP SP3)
Uniform Server 8.5.8-Coral (Windows XP SP3)
For details see:
http://forum.uniformserver.com/index.php?showtopic=2627&hl=
Windows 7 SP1 and Windows Server 2008 R2 (both is 64-bit OS)
I agree with above comment, it makes running PHP on a Windows production server
impractical.
------------------------------------------------------------------------
[2012-07-25 22:26:05] smiles_indonesia at yahoo dot co dot id
It seems happened since introduction of php 5.3.0. If you see in the changelogs:
http://www.php.net/ChangeLog-5.php
Added support for ACL (is_writable, is_readable, reports now correct results)
on Windows. (Pierre, Venkat Raman Don, Kanwaljeet Singla)
This issue is very critical, because it makes php running on windows production
server impractical / unusable...
My quad xeon box becomes very slow after some days, the ram usage is
mysteriously increased (httpd process usage still remains the same, I thought
handle consumes kernel spaces)...
If your webserver servers 1 million request, then there will be about 1 million
handle opened... Usual application only consumes 20 to 2000 handles...
------------------------------------------------------------------------
[2012-06-29 00:10:17] sergio dot nalin at gmail dot com
Description:
------------
PHP vc9 5.3.14, thread safe version + Apache Httpd 2.2.22 + Win 7/Win Server
2008
R2
Each time is_readable in invoked, it leaves an open handle in the httpd process.
Test script:
---------------
for($i=0; $i<100;$i++) {
is_readable("c:\\temp");
}
NOTE: the folder/file must exist for the leak to happen.
Expected result:
----------------
No leaked handles
Actual result:
--------------
100 leaked handles
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=62444&edit=1