Re: PHP 5.0.0 Test roll
| From: | Antony Dovgal | Date: | Tue, 13 Jul 2004 17:08:45 +0000 |
| Subject: | Re: PHP 5.0.0 Test roll | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-11193@lists.php.net to get a copy of this message | ||
On Tue, 13 Jul 2004 15:34:28 +0400
Antony Dovgal <tony2001@phpclub.net> wrote:
> Hi all!
>
> That's what valgrind says:
>
> 1)
> Zend/tests/bug26166.phpt
>
> Zend/zend_execute.c:1352
> EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable),
> op_array->T, 0);
>
> ==8511== 40 bytes in 1 blocks are still reachable in loss record 2 of
> 7==8511== at 0x3C01E375: malloc (vg_replace_malloc.c:105)
> ==8511== by 0x8222A55: _emalloc (zend_alloc.c:182)
> ==8511== by 0x8222C77: _safe_emalloc (zend_alloc.c:238)
> ==8511== by 0x8266E78: execute (zend_execute.c:1352)
>
> 2)
> Zend/tests/bug20240.phpt
>
> ==8478== 40 bytes in 1 blocks are still reachable in loss record 2 of
> 7==8478== at 0x3C01E375: malloc (vg_replace_malloc.c:105)
> ==8478== by 0x8222A55: _emalloc (zend_alloc.c:182)
> ==8478== by 0x8231488: call_user_function (zend_execute_API.c:517)
> ==8478== by 0x816D03B: user_shutdown_function_call
> (basic_functions.c:2088)
Dunno if it's the right thing to add if()'s around emalloc(), but with
attached patch these warnings disappear, reducing valgrind logs in a
half.
---
WBR,
Antony Dovgal aka tony2001
tony2001@phpclub.net || antony@dovgal.com
Index: zend_execute_API.c =================================================================== RCS file: /repository/ZendEngine2/zend_execute_API.c,v retrieving revision 1.287 diff -u -r1.287 zend_execute_API.c --- zend_execute_API.c 18 May 2004 20:14:54 -0000 1.287 +++ zend_execute_API.c 13 Jul 2004 17:04:14 -0000 @@ -514,11 +514,15 @@ int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, zend_uint param_count, zval *params[] TSRMLS_DC) { - zval ***params_array = (zval ***) emalloc(sizeof(zval **)*param_count); + zval ***params_array = NULL; zend_uint i; int ex_retval; zval *local_retval_ptr; + if (param_count) { + params_array = (zval ***) emalloc(sizeof(zval **)*param_count); + } + for (i=0; i<param_count; i++) { params_array[i] = ¶ms[i]; } @@ -528,7 +532,10 @@ } else { INIT_ZVAL(*retval_ptr); } - efree(params_array); + + if (param_count) { + efree(params_array); + } return ex_retval; } Index: zend_execute.c =================================================================== RCS file: /repository/ZendEngine2/zend_execute.c,v retrieving revision 1.652 diff -u -r1.652 zend_execute.c --- zend_execute.c 12 Jul 2004 17:47:29 -0000 1.652 +++ zend_execute.c 13 Jul 2004 17:04:15 -0000 @@ -1330,7 +1330,9 @@ } #define RETURN_FROM_EXECUTE_LOOP(execute_data) \ - efree(EX(Ts)); \ + if (EX(Ts)) { \ + efree(EX(Ts)); \ + } \ EG(in_execution) = EX(original_in_execution); \ EG(current_execute_data) = EX(prev_execute_data); \ return 1; /* CHECK_ME */ @@ -1349,7 +1351,10 @@ /* Initialize execute_data */ EX(fbc) = NULL; EX(object) = NULL; - EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0); + EX(Ts) = NULL; + if (op_array->T) { + EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0); + } EX(op_array) = op_array; EX(original_in_execution) = EG(in_execution); EX(prev_execute_data) = EG(current_execute_data);
Index: zend_execute_API.c =================================================================== RCS file: /repository/ZendEngine2/zend_execute_API.c,v retrieving revision 1.287 diff -u -r1.287 zend_execute_API.c --- zend_execute_API.c 18 May 2004 20:14:54 -0000 1.287 +++ zend_execute_API.c 13 Jul 2004 17:04:14 -0000 @@ -514,11 +514,15 @@ int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, zend_uint param_count, zval *params[] TSRMLS_DC) { - zval ***params_array = (zval ***) emalloc(sizeof(zval **)*param_count); + zval ***params_array = NULL; zend_uint i; int ex_retval; zval *local_retval_ptr; + if (param_count) { + params_array = (zval ***) emalloc(sizeof(zval **)*param_count); + } + for (i=0; i<param_count; i++) { params_array[i] = ¶ms[i]; } @@ -528,7 +532,10 @@ } else { INIT_ZVAL(*retval_ptr); } - efree(params_array); + + if (param_count) { + efree(params_array); + } return ex_retval; } Index: zend_execute.c =================================================================== RCS file: /repository/ZendEngine2/zend_execute.c,v retrieving revision 1.652 diff -u -r1.652 zend_execute.c --- zend_execute.c 12 Jul 2004 17:47:29 -0000 1.652 +++ zend_execute.c 13 Jul 2004 17:04:15 -0000 @@ -1330,7 +1330,9 @@ } #define RETURN_FROM_EXECUTE_LOOP(execute_data) \ - efree(EX(Ts)); \ + if (EX(Ts)) { \ + efree(EX(Ts)); \ + } \ EG(in_execution) = EX(original_in_execution); \ EG(current_execute_data) = EX(prev_execute_data); \ return 1; /* CHECK_ME */ @@ -1349,7 +1351,10 @@ /* Initialize execute_data */ EX(fbc) = NULL; EX(object) = NULL; - EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0); + EX(Ts) = NULL; + if (op_array->T) { + EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0); + } EX(op_array) = op_array; EX(original_in_execution) = EG(in_execution); EX(prev_execute_data) = EG(current_execute_data);