chicken-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] make process[*] return a process-object


From: Peter Bex
Subject: Re: [PATCH] make process[*] return a process-object
Date: Tue, 31 Dec 2024 12:17:57 +0100

On Tue, Dec 31, 2024 at 11:39:12AM +0100, felix.winkelmann@bevuta.com wrote:
> diff --git a/posix-common.scm b/posix-common.scm
> index 7ea2cf56..a1808386 100644
> --- a/posix-common.scm
> +++ b/posix-common.scm
> @@ -677,6 +677,21 @@ EOF
>  
>  ;;; Processes
>  
> +(define-record process id returned-normally? input-port output-port 
> error-port exit-status)
> +
> +(define (get-pid x #!optional default)
> +  (cond ((fixnum? x) x)
> +        ((process? x) (process-id x))
> +        (else default)))
> +
> +(set! chicken.process#process? process?)
> +(set! chicken.process#process-id process-id)
> +(set! chicken.process#process-exit-status process-exit-status)
> +(set! chicken.process#process-returned-normally? process-returned-normally?)
> +(set! chicken.process#process-input-port process-input-port)
> +(set! chicken.process#process-output-port process-output-port)
> +(set! chicken.process#process-error-port process-error-port)
> +
>  (set! chicken.process#process-sleep
>    (lambda (n)
>      (##sys#check-fixnum n 'process-sleep)
> @@ -685,9 +700,12 @@ EOF
>  (set! chicken.process#process-wait
>    (lambda args
>      (let-optionals* args ((pid #f) (nohang #f))
> -      (let ((pid (or pid -1)))
> +      (let ((pid (get-pid pid -1)))
>          (##sys#check-fixnum pid 'process-wait)
>          (receive (epid enorm ecode) (process-wait-impl pid nohang)
> +          (when (process? pid)
> +            (process-returned-normally?-set! pid enorm)
> +             (process-exit-status-set! pid ecode))

This bit looks wrong - the LET above will bind "pid" to an integer, always
because get-pid returns the integer process ID, so the original process
object in the "pid" argument will be lost.

Cheers,
Peter



reply via email to

[Prev in Thread] Current Thread [Next in Thread]