Commit: b54351134314737374721a3f5d1d043a86f067aa Author: Dmitry Stogov <dmi...@zend.com> Thu, 7 Mar 2013 08:13:58 +0400 Parents: 1143d3b1d012ded505bf3e4525ae86f95b729dd9 Branches: PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=b54351134314737374721a3f5d1d043a86f067aa Log: fixed memory leaks Changed paths: M Optimizer/block_pass.c Diff: diff --git a/Optimizer/block_pass.c b/Optimizer/block_pass.c index 9922cbd..a1fc760 100644 --- a/Optimizer/block_pass.c +++ b/Optimizer/block_pass.c @@ -172,12 +172,12 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg) * exception handling */ if (op_array->last_brk_cont) { int i, j; - cfg->loop_start = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); - cfg->loop_cont = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); - cfg->loop_brk = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); + j = 0; for (i = 0; i< op_array->last_brk_cont; i++) { - if (op_array->brk_cont_array[i].start >= 0) { + if (op_array->brk_cont_array[i].start >= 0 && + (op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_FREE || + op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_SWITCH_FREE)) { int parent = op_array->brk_cont_array[i].parent; while (parent >= 0 && @@ -191,6 +191,9 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg) } } if (j) { + cfg->loop_start = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); + cfg->loop_cont = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); + cfg->loop_brk = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); j = 0; for (i = 0; i< op_array->last_brk_cont; i++) { if (op_array->brk_cont_array[i].start >= 0 && @@ -212,13 +215,7 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg) } op_array->last_brk_cont = j; } else { - efree(cfg->loop_start); - efree(cfg->loop_cont); - efree(cfg->loop_brk); efree(op_array->brk_cont_array); - cfg->loop_start = NULL; - cfg->loop_cont = NULL; - cfg->loop_brk = NULL; op_array->brk_cont_array = NULL; op_array->last_brk_cont = 0; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php