Changeset a3cbddc80d866383727c108410305366cc2e77ab

Show
Ignore:
Timestamp:
04/03/10 23:34:38 (2 years ago)
Author:
Philip Herron <redbrain@…>
Parents:
6165c39a0d5efebafa91849836d99de5e00fc950
Children:
04f48fcb11b23adb59ed7282d589e53b8676e870
git-committer:
Philip Herron <redbrain@omicron.(none)> / 2010-04-03T23:34:38Z+0100
Message:

garbage collector cleanups

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/gg_garbage.c

    r6165c39 ra3cbddc  
    4141extern crl_table *crl_functors, *crl_rules; 
    4242extern crl_stack *crl_parse_stk, *crl_lex_stack; 
     43 
    4344// the runtime symbol stack! 
    4445extern crl_context_table *crl_runtime_ctx_table; 
    45 crl_stack* crl_runtime_gbg= NULL; 
     46static crl_stack* crl_runtime_gbg= NULL; 
    4647 
    4748static void free_hash_table_symbols( crl_table ** ); 
     
    5152  if( crl_lex_stack ) 
    5253    { 
    53       char * o= crl_stack_pop( crl_lex_stack ); 
    54       while( o ) 
     54      char * o; 
     55      while( (o= crl_stack_pop( crl_lex_stack )) ) 
    5556        { 
    5657          crl_free( o ); 
    57           o= crl_stack_pop( crl_lex_stack ); 
    5858        } 
    5959      crl_stack_free( crl_lex_stack ); 
     
    6666  if( crl_runtime_gbg ) 
    6767    { 
    68       crl_debug("garbage collection running...\n"); 
     68      crl_debug("garbage collector running...\n"); 
    6969      crl_symbol_obj *p_obj; 
    70       while( (p_obj= crl_stack_pop( crl_runtime_gbg )) ) 
    71         { 
    72           crl_garbage_free_obj( &p_obj ); 
    73         } 
     70      unsigned int i = crl_stack_get_size( crl_runtime_gbg ); 
     71      unsigned int idx = 0; 
     72 
     73      while( idx < i ) 
     74        { 
     75          p_obj = (crl_symbol_obj*) crl_runtime_gbg->array[ idx ]; 
     76          crl_debug("deleting object <%p>!\n", (void*)&p_obj ); 
     77          idx++; crl_garbage_free_obj( &p_obj ); 
     78        } 
    7479      crl_stack_free( crl_runtime_gbg ); 
    75       crl_runtime_gbg= NULL; 
     80      crl_runtime_gbg = NULL; 
    7681    } 
    7782} 
     
    276281    { 
    277282      crl_branch_context *branch= (*ctx); 
    278       if( branch->return_address ) 
    279         crl_garbage_mark_obj( &(branch->return_address) ); 
    280  
     283      if( (branch->return_ctx) || (branch->loop_ctx) ) 
     284        { 
     285          if( branch->return_address ) 
     286            crl_garbage_mark_obj( &(branch->return_address) ); 
     287        } 
    281288      if( branch->table ) 
    282289        crl_garbage_free_hash_table( &(branch->table) );