From: David S. W. <dw...@us...> - 2006-07-24 14:46:36
|
Update of /cvsroot/xsb/XSB/emu In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv5854 Modified Files: biassert.c Log Message: Link record was being freed and THEN a pointer to the next record was retrieved from it. Fixed by getting the pointer to the next before feeing this one. Index: biassert.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/biassert.c,v retrieving revision 1.122 retrieving revision 1.123 diff -u -r1.122 -r1.123 --- biassert.c 20 Jul 2006 20:41:34 -0000 1.122 +++ biassert.c 24 Jul 2006 14:46:20 -0000 1.123 @@ -2598,22 +2598,23 @@ */ int sweep_dynamic(CTXTdeclc DelCFptr *chain_begin) { - DelCFptr delcf_ptr = *chain_begin; + DelCFptr next_delcf_ptr, delcf_ptr = *chain_begin; int dcf_cnt = 0; PrRef prref; - + /* Free global deltcs */ while (delcf_ptr) { + next_delcf_ptr = DCF_NextDCF(delcf_ptr); if (DCF_Mark(delcf_ptr)) { // fprintf(stderr,"GC Sweep skipping marked %s/%d\n", - // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr))); + // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr))); DCF_Mark(delcf_ptr) = 0; dcf_cnt++; } else { if (DCF_Type(delcf_ptr) == DELETED_PRREF) { // fprintf(stderr,"Garbage Collecting Predicate: %s/%d\n", - // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr))); + // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr))); gc_retractall(CTXTc DCF_ClRef(delcf_ptr)); prref = dynpredep_to_prref(CTXTc get_ep(DCF_PSC(delcf_ptr))); Free_DelCF(delcf_ptr,prref,*chain_begin); @@ -2622,7 +2623,7 @@ if (DTF_Type(delcf_ptr) == DELETED_CLREF) { if (determine_if_safe_to_delete(DCF_ClRef(delcf_ptr))) { // fprintf(stderr,"Garbage Collecting Clause: %s/%d (%p)\n", - // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr)), + // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr)), // DCF_ClRef(delcf_ptr)); really_delete_clause(DCF_ClRef(delcf_ptr)); prref = dynpredep_to_prref(CTXTc get_ep(DCF_PSC(delcf_ptr))); @@ -2630,12 +2631,12 @@ } else { dcf_cnt++; // fprintf(stderr,"GC Sweep skipping unsafe: %s/%d\n", - // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr))); + // get_name(DCF_PSC(delcf_ptr)),get_arity(DCF_PSC(delcf_ptr))); } } } } - delcf_ptr = DCF_NextDCF(delcf_ptr); + delcf_ptr = next_delcf_ptr; } return dcf_cnt; } |