From: Rui M. <ru...@us...> - 2007-07-24 19:08:05
|
Update of /cvsroot/xsb/XSB/syslib In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv3458 Modified Files: error_handler.P error_handler.xwam thread.P thread.xwam Log Message: changes to make thread cancellation more robust Index: error_handler.P =================================================================== RCS file: /cvsroot/xsb/XSB/syslib/error_handler.P,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- error_handler.P 7 Jul 2007 21:07:01 -0000 1.44 +++ error_handler.P 24 Jul 2007 19:08:04 -0000 1.45 @@ -121,7 +121,7 @@ (xsb_thread_property(Thread,joinable) -> get_backtrace(Backtrace,ReadBT), asserta('_$thread_exit_ball'(Thread, - cancallation(error(thread_cancel,Msg,ReadBT)))) + cancellation(error(thread_cancel,Msg,ReadBT)))) ; true), internal_thread_exit(THREAD_CANCELLED). % Error: non-cancellation. Index: error_handler.xwam =================================================================== RCS file: /cvsroot/xsb/XSB/syslib/error_handler.xwam,v retrieving revision 1.61 retrieving revision 1.62 diff -u -r1.61 -r1.62 Binary files /tmp/cvse2zocd and /tmp/cvsjhqL0d differ Index: thread.P =================================================================== RCS file: /cvsroot/xsb/XSB/syslib/thread.P,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- thread.P 22 Jul 2007 10:28:41 -0000 1.22 +++ thread.P 24 Jul 2007 19:08:04 -0000 1.23 @@ -125,7 +125,7 @@ ; true), thread_request( XSB_THREAD_EXIT, ExitCode,_, _, _,_,_,_,_). -thread_exit :- internal_thread_exit( 0). +thread_exit :- thread_exit( [] ). /*---------------*/ @@ -212,7 +212,13 @@ permission_error(cancel,main_thread,0,thread_cancel/1) ; true), thread_request( XSB_THREAD_INTERRUPT, Id,_, _, _, _, _, _ ,_). + +thread_enable_cancel :- + thread_request( THREAD_ENABLE_CANCEL, _, _, _, _, _, _, _, _ ). +thread_disable_cancel :- + thread_request( THREAD_DISABLE_CANCEL, _, _, _, _, _, _, _, _ ). + /*---------------*/ thread_yield:- @@ -242,8 +248,15 @@ /* ================================================================== */ /* Routines used internally. */ +thread_run0(Goal) :- + thread_enable_cancel, + call(Goal), + internal_thread_exit(THREAD_SUCCEEDED). + + + '_$thread_run'( Goal ) :- - (catch((call(Goal),internal_thread_exit(THREAD_SUCCEEDED)),Ball,(default_error_handler(Ball))) + (catch( thread_run0(Goal), Ball, (default_error_handler(Ball))) ; internal_thread_exit(THREAD_FAILED) ). Index: thread.xwam =================================================================== RCS file: /cvsroot/xsb/XSB/syslib/thread.xwam,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 Binary files /tmp/cvsl7YReb and /tmp/cvsEiHhgc differ |