[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