add process_wait/3 release(Bool) option

make process_wait/3 release the Process by default
This commit is contained in:
Skgland
2026-04-25 12:59:20 +02:00
committed by Bennet Bleßmann
parent 3da2b8fba2
commit f8c4679850

View File

@@ -95,10 +95,12 @@ process_wait(Process, Status) :- call_with_error_context(process_wait(Process, S
% `Options` is a a list of the following options % `Options` is a a list of the following options
% %
% * timeout(Timeout) supported values for `Timeout` are 0 or `infinite` % * timeout(Timeout) supported values for `Timeout` are 0 or `infinite`
% * release(Bool) supported values for `Bool` are `true` or `false`
% %
% Each options may be specified at most once, when an option is not specified the following defaults apply: % Each options may be specified at most once, when an option is not specified the following defaults apply:
% %
% - timeout(infinite) % - timeout(infinite)
% - release(true)
% %
process_wait(Process, Status, Options) :- call_with_error_context(process_wait_(Process, Status, Options), predicate-process_wait/3). process_wait(Process, Status, Options) :- call_with_error_context(process_wait_(Process, Status, Options), predicate-process_wait/3).
@@ -106,17 +108,29 @@ process_wait_(Process, Status, Options) :-
valid_process(Process), valid_process(Process),
check_options( check_options(
[ [
option([timeout], valid_timeout, timeout(infinite), timeout(Timeout)) option([timeout], valid_timeout, timeout(infinite), timeout(Timeout)),
option([release], valid_release, release(true), release(Release))
], ],
Options, Options,
process_wait_option process_wait_option
), ),
'$process_wait'(Process, Exit, Timeout), '$process_wait'(Process, Exit, Timeout),
((true = Release) -> '$process_release'(Process) ; true),
Exit = Status. Exit = Status.
valid_timeout(timeout(infinite)). valid_timeout(timeout(infinite)).
valid_timeout(timeout(0)). valid_timeout(timeout(0)).
valid_release(release(Arg)) :-
( var(Arg) -> instantiation_error([])
; valid_bool(Arg) -> true
; domain_error(boolean, Arg, [])
).
valid_bool(true).
valid_bool(false).
%% process_kill(+Process). %% process_kill(+Process).
% %
@@ -141,8 +155,7 @@ process_release(Process) :- call_with_error_context(process_release_(Process), p
process_release_(Process) :- process_release_(Process) :-
valid_process(Process), valid_process(Process),
process_wait(Process, _), process_wait(Process, _).
'$process_release'(Process).
must_be_known_options(Valid, Options, Domain) :- call_with_error_context(must_be_known_options_(Valid, [], Options, Domain),predicate-must_be_known_options/3). must_be_known_options(Valid, Options, Domain) :- call_with_error_context(must_be_known_options_(Valid, [], Options, Domain),predicate-must_be_known_options/3).