From: Rui M. <ru...@us...> - 2005-07-22 22:51:20
|
Update of /cvsroot/xsb/XSB/emu In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5060 Modified Files: deadlock.c slginsts_xsb_i.h Log Message: fixes for deadlock breaking algorithm Index: deadlock.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/deadlock.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- deadlock.c 22 Jul 2005 17:21:52 -0000 1.4 +++ deadlock.c 22 Jul 2005 22:51:01 -0000 1.5 @@ -28,20 +28,10 @@ return FALSE ; } -static void reinit_subgoal( VariantSF sgf ) -{ -/* SM_DeallocateStructList(smALN,subg_answers(sgf),subg_ans_list_tail(sgf)); - */ - subg_ans_list_ptr(sgf) = empty_return(); - subg_ans_list_tail(sgf) = NULL; - subg_asf_list_ptr(sgf) = NULL; -} - static VariantSF bottom_leader(th_context *th, VariantSF to_sgf) { - CPtr csf = openreg ; - while( compl_subgoal_ptr(csf) != to_sgf ) - csf = prev_compl_frame(csf) ; + CPtr csf = subg_compl_stack_ptr(to_sgf) ; + while( prev_compl_frame(csf) < COMPLSTACKBOTTOM && !is_leader(csf) ) csf = prev_compl_frame(csf) ; return compl_subgoal_ptr(csf) ; @@ -53,7 +43,8 @@ for(;;) { subg_grabbed(compl_subgoal_ptr(csf)) = TRUE ; subg_tid(compl_subgoal_ptr(csf)) = leader ; - reinit_subgoal(compl_subgoal_ptr(csf)) ; + subg_asf_list_ptr(compl_subgoal_ptr(csf)) = NULL; + subg_compl_susp_ptr(compl_subgoal_ptr(csf)) = NULL; if( compl_subgoal_ptr(csf) == to ) break; csf = prev_compl_frame(csf) ; @@ -62,6 +53,7 @@ static void reset_thread( th_context *th, th_context *ctxt, VariantSF sgf ) { + CPtr tbreg ; /* if the subgoal has not yet been computed, the thread should not be reset */ if( subg_grabbed(sgf) ) @@ -75,13 +67,15 @@ th = ctxt ; /* reset the stacks by restoring the generator cp of this sg */ breg = subg_cp_ptr(sgf) ; - switch_envs(breg); - ptcpreg = tcp_subgoal_ptr(breg); + tbreg = breg ; + openreg = prev_compl_frame(subg_compl_stack_ptr(sgf)) ; + switch_envs(tbreg); + ptcpreg = tcp_subgoal_ptr(tbreg); delayreg = NULL; - reclaim_stacks(breg) ; - restore_some_wamregs(breg, ereg); - pcreg = (byte *)tcp_reset_pcreg(breg) ; - table_restore_registers(breg, pcreg[3], reg); + reclaim_stacks(tbreg) ; + restore_some_wamregs(tbreg, ereg); + pcreg = (byte *)tcp_reset_pcreg(tbreg) ; + table_restore_registers(tbreg, pcreg[3], reg); /* delete the generator cp */ breg = tcp_prevbreg(breg) ; Index: slginsts_xsb_i.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/slginsts_xsb_i.h,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- slginsts_xsb_i.h 21 Jul 2005 16:51:03 -0000 1.40 +++ slginsts_xsb_i.h 22 Jul 2005 22:51:02 -0000 1.41 @@ -243,10 +243,6 @@ NewProducerSF(producer_sf, CallLUR_Leaf(lookupResults), CallInfo_TableInfo(callInfo)); #endif - - - - producer_cpf = answer_template; save_find_locx(ereg); save_registers(producer_cpf, CallInfo_CallArity(callInfo), rreg); |