From 2314efdc6c7fea1c9415fd4573d39c9bd5747293 Mon Sep 17 00:00:00 2001 From: Paulo Moura Date: Mon, 11 Nov 2013 17:11:53 +0000 Subject: [PATCH] Make `thread_property/2` deterministic when the second argument is instantiated --- pl/threads.yap | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/pl/threads.yap b/pl/threads.yap index cbb1a5cbe..a0cfaabc5 100644 --- a/pl/threads.yap +++ b/pl/threads.yap @@ -858,7 +858,7 @@ thread_signal(Id, Goal) :- thread_property(Prop) :- '$check_thread_property'(Prop, thread_property(Prop)), '$thread_self'(Id), - '$thread_property'(Id, Prop). + '$thread_property'(Prop, Id). thread_property(Id, Prop) :- ( nonvar(Id) -> @@ -867,7 +867,7 @@ thread_property(Id, Prop) :- ), '$check_thread_property'(Prop, thread_property(Id, Prop)), '$thread_id_alias'(Id0, Id), - '$thread_property'(Id0, Prop). + '$thread_property'(Prop, Id0). '$enumerate_threads'(Id) :- '$max_threads'(Max), @@ -875,32 +875,31 @@ thread_property(Id, Prop) :- between(0,Max1,Id), '$thread_stacks'(Id, _, _, _). -'$thread_property'(Id, alias(Alias)) :- +'$thread_property'(alias(Alias), Id) :- recorded('$thread_alias', [Id|Alias], _). -'$thread_property'(Id, status(Status)) :- +'$thread_property'(status(Status), Id) :- '$mk_tstatus_key'(Id, Key), ( recorded(Key, Exit, _) -> Status = Exit ; Status = running ). -'$thread_property'(Id, detached(Detached)) :- +'$thread_property'(detached(Detached), Id) :- ( '$thread_detached'(Id,Detached) -> true ; Detached = false ). -'$thread_property'(Id, at_exit(M:G)) :- +'$thread_property'(at_exit(M:G), Id) :- '$thread_run_at_exit'(G,M). -'$thread_property'(Id, InfoSize) :- - '$thread_stacks'(Id, Stack, Trail, System), - '$select_thread_property'(InfoSize, Stack, Trail, System). - -'$select_thread_property'(stack(Stack), Stack, _, _). -'$select_thread_property'(trail(Trail), _, Trail, _). -'$select_thread_property'(system(System), _, _, System). +'$thread_property'(stack(Stack), Id) :- + '$thread_stacks'(Id, Stack, _, _). +'$thread_property'(trail(Trail), Id) :- + '$thread_stacks'(Id, _, Trail, _). +'$thread_property'(system(System), Id) :- + '$thread_stacks'(Id, _, _, System). threads :- format(user_error,'------------------------------------------------------------------------~n',[]), format(user_error, '~t~a~48+~n', 'Thread Detached Status'), format(user_error,'------------------------------------------------------------------------~n',[]), thread_property(Id, detached(Detached)), - '$thread_property'(Id, status(Status)), + thread_property(Id, status(Status)), '$thread_id_alias'(Id, Alias), format(user_error,'~t~q~30+~33|~w~42|~q~n', [Alias, Detached, Status]), fail.