Changeset 4184
- Timestamp:
- 04/01/08 12:55:34 (9 months ago)
- Files:
-
- 1 modified
-
trunk/compiler/logtalk.pl (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/compiler/logtalk.pl
r4183 r4184 12959 12959 12960 12960 '$lgt_mt_threaded_and_exit'(terminate, _, Ids, _) :- 12961 '$lgt_mt_threaded_call_ abort'(Ids).12961 '$lgt_mt_threaded_call_cancel'(Ids). 12962 12962 12963 12963 '$lgt_mt_threaded_and_exit'(exception(Error), _, Ids, _) :- 12964 '$lgt_mt_threaded_call_ abort'(Ids, Error),12964 '$lgt_mt_threaded_call_cancel'(Ids, Error), 12965 12965 throw(Error). 12966 12966 … … 12969 12969 '$lgt_mt_threaded_and_add_result'(Results, Id, TGoal, Continue), 12970 12970 ( Continue == false -> 12971 '$lgt_mt_threaded_call_ clean'(Ids)12971 '$lgt_mt_threaded_call_join'(Ids) 12972 12972 ; '$lgt_mt_threaded_and_exit'(Ids, Results) 12973 12973 ). 12974 12974 12975 12975 '$lgt_mt_threaded_and_exit'(false, _, Ids, _) :- 12976 '$lgt_mt_threaded_call_ abort'(Ids),12976 '$lgt_mt_threaded_call_cancel'(Ids), 12977 12977 fail. 12978 12978 … … 13021 13021 13022 13022 '$lgt_mt_threaded_or_exit'(terminate, _, Ids, _) :- 13023 '$lgt_mt_threaded_call_ abort'(Ids).13023 '$lgt_mt_threaded_call_cancel'(Ids). 13024 13024 13025 13025 '$lgt_mt_threaded_or_exit'(exception(Error), _, Ids, _) :- 13026 '$lgt_mt_threaded_call_ abort'(Ids, Error),13026 '$lgt_mt_threaded_call_cancel'(Ids, Error), 13027 13027 throw(Error). 13028 13028 13029 13029 '$lgt_mt_threaded_or_exit'(true, Id, Ids, Results) :- 13030 13030 thread_get_message('$lgt_result'(Id, TGoal)), 13031 '$lgt_mt_threaded_call_ abort'(Ids),13031 '$lgt_mt_threaded_call_cancel'(Ids), 13032 13032 '$lgt_mt_threaded_or_exit_unify'(Results, Id, TGoal). 13033 13033 … … 13037 13037 '$lgt_mt_threaded_or_exit'(Ids, Results) 13038 13038 ; % all goals failed 13039 '$lgt_mt_threaded_call_ clean'(Ids),13039 '$lgt_mt_threaded_call_join'(Ids), 13040 13040 fail 13041 13041 ). … … 13089 13089 % we must use catch/3 as some threads may already be terminated 13090 13090 13091 '$lgt_mt_threaded_call_abort'(Ids) :- 13092 '$lgt_mt_threaded_call_cancel'(Ids), 13093 '$lgt_mt_threaded_call_clean'(Ids). 13094 13095 13096 '$lgt_mt_threaded_call_cancel'([]). 13097 13098 '$lgt_mt_threaded_call_cancel'([Id| Ids]) :- 13091 '$lgt_mt_threaded_call_cancel'(Ids) :- 13092 '$lgt_mt_threaded_call_abort'(Ids), 13093 '$lgt_mt_threaded_call_join'(Ids). 13094 13095 13096 '$lgt_mt_threaded_call_abort'([]). 13097 13098 '$lgt_mt_threaded_call_abort'([Id| Ids]) :- 13099 catch(thread_send_message(Id, '$lgt_status'(_, terminate)), _, true), 13099 13100 ( catch(thread_peek_message(Id, '$lgt_master'), _, fail) -> 13100 catch(thread_send_message(Id, '$lgt_status'(_, terminate)), _, true)13101 true 13101 13102 ; catch(thread_signal(Id, '$lgt_mt_thread_abort'(abort)), _, true) 13102 13103 ), 13103 '$lgt_mt_threaded_call_cancel'(Ids). 13104 13105 13106 '$lgt_mt_threaded_call_abort'(Ids, Error) :- 13107 '$lgt_mt_threaded_call_cancel'(Ids, Error), 13108 '$lgt_mt_threaded_call_clean'(Ids). 13109 13110 13111 '$lgt_mt_threaded_call_cancel'([], _). 13112 13113 '$lgt_mt_threaded_call_cancel'([Id| Ids], Error) :- 13104 '$lgt_mt_threaded_call_abort'(Ids). 13105 13106 13107 '$lgt_mt_threaded_call_cancel'(Ids, Error) :- 13108 '$lgt_mt_threaded_call_abort'(Ids, Error), 13109 '$lgt_mt_threaded_call_join'(Ids). 13110 13111 13112 '$lgt_mt_threaded_call_abort'([], _). 13113 13114 '$lgt_mt_threaded_call_abort'([Id| Ids], Error) :- 13115 catch(thread_send_message(Id, '$lgt_status'(_, terminate)), _, true), 13114 13116 ( catch(thread_peek_message(Id, '$lgt_master'), _, fail) -> 13115 catch(thread_send_message(Id, '$lgt_status'(_, terminate)), _, true)13117 true 13116 13118 ; catch(thread_signal(Id, '$lgt_mt_thread_abort'(Error)), _, true) 13117 13119 ), 13118 '$lgt_mt_threaded_call_ cancel'(Ids, Error).13119 13120 13121 '$lgt_mt_threaded_call_ clean'([]).13122 13123 '$lgt_mt_threaded_call_ clean'([Id| Ids]) :-13120 '$lgt_mt_threaded_call_abort'(Ids, Error). 13121 13122 13123 '$lgt_mt_threaded_call_join'([]). 13124 13125 '$lgt_mt_threaded_call_join'([Id| Ids]) :- 13124 13126 catch(thread_join(Id, _), _, true), 13125 '$lgt_mt_threaded_call_ clean'(Ids).13127 '$lgt_mt_threaded_call_join'(Ids). 13126 13128 13127 13129 13128 13130 '$lgt_mt_thread_abort'(Error) :- 13129 findall(Id, (thread_peek_message('$lgt_status'(Id, _)), thread_get_message('$lgt_status'(Id, _)) ), Ids),13131 findall(Id, (thread_peek_message('$lgt_status'(Id, _)), thread_get_message('$lgt_status'(Id, _)), nonvar(Id)), Ids), 13130 13132 '$lgt_mt_threaded_call_abort'(Ids, Error), 13131 13133 mutex_unlock_all,
