From f8c46798501821a920ecf09bde329021c5d9e37f Mon Sep 17 00:00:00 2001 From: Skgland Date: Sat, 25 Apr 2026 12:59:20 +0200 Subject: [PATCH] add process_wait/3 release(Bool) option make process_wait/3 release the Process by default --- src/lib/process.pl | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/lib/process.pl b/src/lib/process.pl index 57c71426..371006d8 100644 --- a/src/lib/process.pl +++ b/src/lib/process.pl @@ -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 % % * 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: % % - timeout(infinite) +% - release(true) % 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), 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, process_wait_option ), '$process_wait'(Process, Exit, Timeout), + ((true = Release) -> '$process_release'(Process) ; true), Exit = Status. valid_timeout(timeout(infinite)). 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). % @@ -139,10 +153,9 @@ process_kill_(Process) :- % process_release(Process) :- call_with_error_context(process_release_(Process), predicate-process_release/1). -process_release_(Process) :- +process_release_(Process) :- valid_process(Process), - process_wait(Process, _), - '$process_release'(Process). + process_wait(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). @@ -184,9 +197,9 @@ find_option(Names, Found, T) :- functor(Found, Name, 1), memberd_t(Name, Names, T). -valid_stdio(IO) :- arg(1, IO, Arg), - ( var(Arg) -> instantiation_error([]) - ; valid_stdio_(Arg) -> true +valid_stdio(IO) :- arg(1, IO, Arg), + ( var(Arg) -> instantiation_error([]) + ; valid_stdio_(Arg) -> true ; domain_error(stdio_spec, Arg, []) ). -- 2.54.0