Bug #80199 [Dup]: PHP leaking memory by not releasing anonymous function declaration
| From: | gilperon at gmail dot com | Date: | Wed, 07 Oct 2020 18:16:59 +0000 |
| Subject: | Bug #80199 [Dup]: PHP leaking memory by not releasing anonymous function declaration | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-229458@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80199&edit=1
ID: 80199
User updated by: gilperon at gmail dot com
Reported by: gilperon at gmail dot com
Summary: PHP leaking memory by not releasing anonymous
function declaration
Status: Duplicate
Type: Bug
Package: *General Issues
Operating System: CENTOS 8 and WINDOWS 10
PHP Version: 7.4.11
Block user comment: N
Private report: N
New Comment:
IT HAS ABSOLUTELY NO RELATION WITH THE OTHER QUESTION!
Since you mother F ** are all lazy, I simplified the code:
<?php
set_time_limit(0);
ini_set('memory_limit','-1');
for ($i=0;$i<100000000;$i++) {
eval('
$bbb = function() {
return true;
};
');
unset($bbb);
}
?>
<?php
set_time_limit(0);
ini_set('memory_limit','-1');
for ($i=0;$i<100000000;$i++) {
$bbb = function() {
return true;
};
unset($bbb);
}
?>
Run both codes above on a Windows 10 + PHP 7.4 and you will see your OS crash. Stupid morons.
Anyway, I dont need you to fix this, I found a way around, if you dont wanna fix it, go f**
yourself.
Previous Comments:
------------------------------------------------------------------------
[2020-10-07 18:08:12] nikic@php.net
Duplicate of bug #76982.
------------------------------------------------------------------------
[2020-10-07 18:07:36] requinix@php.net
Are you using $a or $funcao_testar_retorno_parametros?
------------------------------------------------------------------------
[2020-10-07 17:48:36] gilperon at gmail dot com
Description:
------------
Run the test script. In it I am declaring an anonymous function (because I want to be able to unset
it later) using eval (my actual function is much more complicated, and I really need to use eval)
and unseting it. If you check memory usage while executing this script you will see it will rise,
rise and crash.
What is weird, is that if I execute the same test script but without using eval (code below) it
works just fine, no memory leak, no crash... nothing. Apache barely uses any memory.
<?php
set_time_limit(0);
ini_set('memory_limit','-1');
$aaa = array();
for ($i=0;$i<10000000;$i++) {
$aaa[$i] = function($iduc,$cp_ccp) {
return ($cp_ccp and $iduc);
};
unset($aaa[$i]);
}
?>
Test script:
---------------
<?php
set_time_limit(0);
ini_set('memory_limit','-1');
$a = array();
for ($i=0;$i<100000000;$i++) {
eval('
$a[' . $i . '] =
function($i,$da_ca,$iduc,$cp_ccp) {
return ($cp_ccp[' . $i . '] and $iduc[' . ($i+1) . ']);
};
');
unset($funcao_testar_retorno_parametros[$i]);
}
?>
Expected result:
----------------
Variable should be unsetted and memory released.
Actual result:
--------------
Variable does not get out of memory and in a couple minutes crash Apache with lots of error messages
complaining about lack of system memory on error_log.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80199&edit=1