CVS update: php31/main

From: Date: Sat, 19 Sep 1998 12:16:38 +0000
Subject: CVS update: php31/main
Groups: php.dev 
Request: Send a blank email to php-dev+get-1248@lists.php.net to get a copy of this message
Date: Saturday September 19, 1998 @ 8:16 Author: zeev Update of /repository/php31/main In directory asf:/u2/tmp/cvs-serv6839/main Modified Files: main.c Log Message: Fix function state stack shutdown Index: php31/main/main.c diff -c php31/main/main.c:2.37 php31/main/main.c:2.38 *** php31/main/main.c:2.37 Mon Sep 14 21:34:23 1998 --- php31/main/main.c Sat Sep 19 08:16:37 1998 *************** *** 29,35 **** +----------------------------------------------------------------------+ */ ! /* $Id: main.c,v 2.37 1998/09/15 01:34:23 shane Exp $ */ /* #define CRASH_DETECTION */ --- 29,35 ---- +----------------------------------------------------------------------+ */ ! /* $Id: main.c,v 2.38 1998/09/19 12:16:37 zeev Exp $ */ /* #define CRASH_DETECTION */ *************** *** 762,781 **** #endif if (GLOBAL(initialized) & INIT_FUNCTION_STATE_STACK) { FunctionState *tmp; while (stack_top(&GLOBAL(function_state_stack), (void **) &tmp) != FAILURE) { if (tmp->function_name) { efree(tmp->function_name); ! if (tmp->symbol_table && tmp->symbol_table != &GLOBAL(symbol_table)) { _php3_hash_destroy(tmp->symbol_table); efree(tmp->symbol_table); } } stack_del_top(&GLOBAL(function_state_stack)); } if (GLOBAL(function_state).function_name) { efree(GLOBAL(function_state).function_name); ! if (GLOBAL(function_state).symbol_table && GLOBAL(function_state).symbol_table != &GLOBAL(symbol_table)) { _php3_hash_destroy(GLOBAL(function_state).symbol_table); efree(GLOBAL(function_state).symbol_table); } --- 762,789 ---- #endif if (GLOBAL(initialized) & INIT_FUNCTION_STATE_STACK) { FunctionState *tmp; + HashTable *last_symbol_table=NULL; /* to protect against freeing the same symtable twice, + * if we 'crashed' in a nested function call + */ while (stack_top(&GLOBAL(function_state_stack), (void **) &tmp) != FAILURE) { if (tmp->function_name) { efree(tmp->function_name); ! if (tmp->symbol_table ! && (tmp->symbol_table != &GLOBAL(symbol_table)) ! && (tmp->symbol_table != last_symbol_table)) { _php3_hash_destroy(tmp->symbol_table); efree(tmp->symbol_table); + last_symbol_table = tmp->symbol_table; } } stack_del_top(&GLOBAL(function_state_stack)); } if (GLOBAL(function_state).function_name) { efree(GLOBAL(function_state).function_name); ! if (GLOBAL(function_state).symbol_table ! && (GLOBAL(function_state).symbol_table != &GLOBAL(symbol_table)) ! && (GLOBAL(function_state).symbol_table != last_symbol_table)) { _php3_hash_destroy(GLOBAL(function_state).symbol_table); efree(GLOBAL(function_state).symbol_table); } -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#1248) next »