On Tue, 13 Jul 2004 15:34:28 +0400 Antony Dovgal <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED] || [EMAIL PROTECTED]
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);
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php