- Timestamp:
- 06/15/08 09:30:28 (3 months ago)
- Files:
-
- 1 modified
-
trunk/compiler/logtalk.pl (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/compiler/logtalk.pl
r4314 r4315 13176 13176 thread_self(Id), 13177 13177 call(Goal), 13178 thread_send_message(Queue, '$lgt_result'(Id, Goal)).13178 thread_send_message(Queue, '$lgt_result'(Id, true(Goal))). 13179 13179 13180 13180 … … 13189 13189 '$lgt_mt_threaded_exit_handler'(Id, Queue) :- 13190 13190 thread_property(Id, status(Status)), 13191 catch(thread_send_message(Queue, '$lgt_status'(Id, Status)), _, thread_detach(Id)). 13191 ( Status == true -> 13192 true 13193 ; catch(thread_send_message(Queue, '$lgt_result'(Id, Status)), _, thread_detach(Id)) 13194 ). 13192 13195 13193 13196 … … 13199 13202 13200 13203 '$lgt_mt_threaded_and_exit'(Ids, Results) :- 13201 thread_get_message('$lgt_ status'(Id, Result)),13204 thread_get_message('$lgt_result'(Id, Result)), 13202 13205 '$lgt_mt_threaded_and_exit'(Result, Id, Ids, Results). 13203 13206 … … 13218 13221 ). 13219 13222 13220 '$lgt_mt_threaded_and_exit'(true, Id, Ids, Results) :- 13221 thread_get_message('$lgt_result'(Id, TGoal)), 13223 '$lgt_mt_threaded_and_exit'(true(TGoal), Id, Ids, Results) :- 13222 13224 '$lgt_mt_threaded_and_add_result'(Results, Id, TGoal, Continue), 13223 13225 ( Continue == false -> … … 13270 13272 13271 13273 '$lgt_mt_threaded_or_exit'(Ids, Results) :- 13272 thread_get_message('$lgt_ status'(Id, Result)),13274 thread_get_message('$lgt_result'(Id, Result)), 13273 13275 '$lgt_mt_threaded_or_exit'(Result, Id, Ids, Results). 13274 13276 … … 13289 13291 ). 13290 13292 13291 '$lgt_mt_threaded_or_exit'(true, Id, Ids, Results) :- 13292 thread_get_message('$lgt_result'(Id, TGoal)), 13293 '$lgt_mt_threaded_record_result'(Results, Id, true), 13294 '$lgt_mt_threaded_call_cancel'(Ids, Results), 13295 '$lgt_mt_threaded_or_exit_unify'(Results, Id, TGoal). 13293 '$lgt_mt_threaded_or_exit'(true(TGoal), Id, Ids, Results) :- 13294 '$lgt_mt_threaded_or_exit_unify'(Results, Id, TGoal), 13295 '$lgt_mt_threaded_call_cancel'(Ids, Results). 13296 13296 13297 13297 '$lgt_mt_threaded_or_exit'(false, Id, Ids, Results) :- … … 13316 13316 13317 13317 13318 % '$lgt_mt_threaded_record_result'(+list, +thread_identifier, +callable)13319 %13320 % records a thread goal result:13321 13322 '$lgt_mt_threaded_record_result'([id(Id, _, Result)| _], Id, Result) :-13323 !.13324 13325 '$lgt_mt_threaded_record_result'([_| Results], Id, Result) :-13326 '$lgt_mt_threaded_record_result'(Results, Id, Result).13327 13328 13329 13330 13318 % '$lgt_mt_threaded_or_record_failure'(+list, +thread_identifier, -atom) 13331 13319 % … … 13359 13347 13360 13348 13349 % '$lgt_mt_threaded_record_result'(+list, +thread_identifier, +callable) 13350 % 13351 % records a thread goal result: 13352 13353 '$lgt_mt_threaded_record_result'([id(Id, _, Result)| _], Id, Result) :- 13354 !. 13355 13356 '$lgt_mt_threaded_record_result'([_| Results], Id, Result) :- 13357 '$lgt_mt_threaded_record_result'(Results, Id, Result). 13358 13359 13360 13361 13361 % '$lgt_mt_threaded_call_cancel'(+list(thread_identifier), +list) 13362 13362 % … … 13373 13373 '$lgt_mt_threaded_call_abort'([Id| Ids]) :- 13374 13374 ( catch(thread_peek_message(Id, '$lgt_master'), _, fail) -> 13375 catch(thread_send_message(Id, '$lgt_ status'(_, terminate)), _, true)13375 catch(thread_send_message(Id, '$lgt_result'(_, terminate)), _, true) 13376 13376 ; catch(thread_signal(Id, throw('$lgt_terminated')), _, true) 13377 13377 ), … … 13383 13383 '$lgt_mt_threaded_call_join'([Id| Ids], [id(Id, _, Result)| Results]) :- 13384 13384 ( var(Result) -> 13385 % don't leak thread results 13386 thread_get_message('$lgt_status'(Id, Result)), 13387 ( Result == true -> 13388 thread_get_message('$lgt_result'(Id, _)) 13389 ; true 13390 ) 13385 thread_get_message('$lgt_result'(Id, _)) % don't leak thread results 13391 13386 ; true 13392 13387 ),
