From: David S. W. <dw...@us...> - 2006-09-08 20:00:00
|
Update of /cvsroot/xsb/XSB/emu In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv16628 Modified Files: flag_defs_xsb.h gc_mark.h gc_profile.h heap_xsb.c init_xsb.c Log Message: Added shared stat_flag (70, STRING_GARBAGE_COLLECTION) to allow user to turn off string garbage collection. Added a counter that's printed in statistics to indicate how many times string garbage collection has been called. Index: flag_defs_xsb.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/flag_defs_xsb.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- flag_defs_xsb.h 8 Jul 2006 18:49:11 -0000 1.18 +++ flag_defs_xsb.h 8 Sep 2006 19:59:47 -0000 1.19 @@ -47,7 +47,7 @@ #define PROFFLAG 12 #define TABLING_METHOD 13 /* Default method used to evaluate tabled */ #define CLAUSE_GARBAGE_COLLECT 14 /* Turn clause gc on or off */ -/* Flags 14-24 are open to use */ +/* Flags 15-24 are open to use */ /* * Flags 25-41 are reserved for Interrupt Handler PSCs. @@ -117,6 +117,7 @@ #define ORA_INPUTARRAY_WIDTH 68 /* max size of each input value */ #define ORA_OUTPUTARRAY_LENGTH 69 /* max # simultaneous output tuples */ +#define STRING_GARBAGE_COLLECT 70 /* Turn string gc on or off */ #define MAX_FLAGS 75 Index: gc_mark.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/gc_mark.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- gc_mark.h 2 Sep 2006 19:27:52 -0000 1.19 +++ gc_mark.h 8 Sep 2006 19:59:47 -0000 1.20 @@ -339,7 +339,7 @@ #ifdef MULTI_THREAD if (flags[NUM_THREADS] == 1) #endif - if (gc_strings) { + if (gc_strings && (flags[STRING_GARBAGE_COLLECT] == 1)) { if (tag == XSB_STRING) { char *astr = string_val(cell_val); if (astr && (string_find_safe(astr) == astr)) @@ -425,7 +425,8 @@ if (!points_into_heap(cell_ptr)) return(0) ; v = *cell_ptr ; #ifndef NO_STRING_GC - if (gc_strings) mark_if_string(v,"attv 1"); + if (gc_strings && (flags[STRING_GARBAGE_COLLECT] == 1)) + mark_if_string(v,"attv 1"); #endif pointer_from_cell(v,&tag,&whereto) ; switch (tag) { @@ -436,7 +437,8 @@ } v = *(++cell_ptr) ; #ifndef NO_STRING_GC - if (gc_strings) mark_if_string(v,"attv 2"); + if (gc_strings && (flags[STRING_GARBAGE_COLLECT] == 1)) + mark_if_string(v,"attv 2"); #endif pointer_from_cell(v,&tag,&whereto) ; switch (tag) { @@ -455,7 +457,7 @@ #ifdef MULTI_THREAD if (flags[NUM_THREADS] == 1) #endif - if (gc_strings) { + if (gc_strings && (flags[STRING_GARBAGE_COLLECT] == 1)) { char *sstr = string_val(cell_val); if (sstr && (string_find_safe(sstr) == sstr)) mark_string_safe(sstr,"mark_root"); Index: gc_profile.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/gc_profile.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- gc_profile.h 27 Apr 2006 21:08:47 -0000 1.9 +++ gc_profile.h 8 Sep 2006 19:59:47 -0000 1.10 @@ -291,8 +291,8 @@ { char *which = (slide) ? "sliding" : "copying" ; - printf("%4d heap garbage collections by %s: collected %ld cells in %lf secs\n\n", - num_gc, which, total_collected, total_time_gc); + printf("%4d heap (%3d string) garbage collections by %s: collected %ld cells in %lf secs\n\n", + num_gc, num_sgc, which, total_collected, total_time_gc); } Index: heap_xsb.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/heap_xsb.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -r1.52 -r1.53 --- heap_xsb.c 21 Jun 2006 20:17:11 -0000 1.52 +++ heap_xsb.c 8 Sep 2006 19:59:47 -0000 1.53 @@ -326,6 +326,8 @@ static int num_gc = 0 ; #endif +static int num_sgc = 0 ; + /*----------------------------------------------------------------------*/ /* marker bits in different areas. */ /*----------------------------------------------------------------------*/ @@ -777,8 +779,9 @@ #ifdef MULTI_THREAD if (flags[NUM_THREADS] == 1) { #endif - if (gc_strings) { + if (gc_strings && (flags[STRING_GARBAGE_COLLECT] == 1)) { // long beg_string_space_size = pspacesize[STRING_SPACE]; + num_sgc++; begin_stringtime = cpu_time(); mark_nonheap_strings(CTXT); free_unused_strings(); Index: init_xsb.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/init_xsb.c,v retrieving revision 1.99 retrieving revision 1.100 diff -u -r1.99 -r1.100 --- init_xsb.c 6 Sep 2006 05:15:27 -0000 1.99 +++ init_xsb.c 8 Sep 2006 19:59:47 -0000 1.100 @@ -221,6 +221,7 @@ flags[NUM_THREADS] = 1; /* 1 thread will be run at start */ pflags[BACKTRACE] = 1; /* Backtrace on error by default */ pflags[CLAUSE_GARBAGE_COLLECT] = 1; /* Clause GC on by default */ + flags[STRING_GARBAGE_COLLECT] = 1; /* String GC on by default */ } /*==========================================================================*/ |