CVS update: php31/main
| From: | zeev | 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