From: David S. W. <dw...@us...> - 2006-07-24 19:47:50
|
Update of /cvsroot/xsb/XSB/emu In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31590 Modified Files: tr_utils.c Log Message: Fixed a couple of more cases where a pointer was retrieved from a record AFTER it was freed. Index: tr_utils.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/tr_utils.c,v retrieving revision 1.114 retrieving revision 1.115 diff -u -r1.114 -r1.115 --- tr_utils.c 20 Jun 2006 19:16:03 -0000 1.114 +++ tr_utils.c 24 Jul 2006 19:47:43 -0000 1.115 @@ -1561,13 +1561,14 @@ deltf (it must be for this generation of the table) */ void check_insert_global_deltf_pred(CTXTdeclc TIFptr tif) { - DelTFptr dtf = TIF_DelTF(tif); + DelTFptr dtf = TIF_DelTF(tif), next_dtf; BTNptr call_trie = TIF_CallTrie(tif); VariantSF subgoals = TIF_Subgoals(tif); int found = 0; SYS_MUTEX_LOCK(MUTEX_TABLE); while ( dtf != 0 ) { + next_dtf = DTF_NextPredDTF(dtf); if (DTF_Type(dtf) == DELETED_PREDICATE && DTF_CallTrie(dtf) == call_trie && DTF_Subgoals(dtf) == subgoals) found = 1; @@ -1576,7 +1577,7 @@ get_name(TIF_PSC(tif)),get_arity(TIF_PSC(tif))); Free_Global_DelTF_Subgoal(dtf,tif); } - dtf = DTF_NextPredDTF(dtf); + dtf = next_dtf; } if (!found) { New_Global_DelTF_Pred(dtf,tif); @@ -2031,12 +2032,13 @@ #ifdef MULTI_THREAD int sweep_private_tabled_preds(CTXTdecl) { - DelTFptr deltf_ptr; + DelTFptr deltf_ptr, next_deltf_ptr; int dtf_cnt = 0; TIFptr tif_ptr; deltf_ptr = private_deltf_chain_begin; while (deltf_ptr) { + next_deltf_ptr = DTF_NextDTF(deltf_ptr); if (DTF_Mark(deltf_ptr)) { tif_ptr = subg_tif_ptr(DTF_Subgoals(deltf_ptr)); fprintf(stderr,"Skipping: %s/%d\n", @@ -2060,7 +2062,7 @@ Free_Private_DelTF_Subgoal(deltf_ptr,tif_ptr); } } - deltf_ptr = DTF_NextDTF(deltf_ptr); + deltf_ptr = next_deltf_ptr; } return dtf_cnt; } @@ -2070,13 +2072,14 @@ with one active thread */ int sweep_tabled_preds(CTXTdecl) { - DelTFptr deltf_ptr; + DelTFptr deltf_ptr, next_deltf_ptr; int dtf_cnt = 0; TIFptr tif_ptr; /* Free global deltfs */ deltf_ptr = deltf_chain_begin; while (deltf_ptr) { + next_deltf_ptr = DTF_NextDTF(deltf_ptr); if (DTF_Mark(deltf_ptr)) { tif_ptr = subg_tif_ptr(DTF_Subgoals(deltf_ptr)); fprintf(stderr,"Skipping: %s/%d\n", @@ -2100,7 +2103,7 @@ Free_Global_DelTF_Subgoal(deltf_ptr,tif_ptr); } } - deltf_ptr = DTF_NextDTF(deltf_ptr); + deltf_ptr = next_deltf_ptr; } #ifdef MULTI_THREAD |