On Tue, Dec 31, 2024 at 11:39:12AM +0100, [email protected] 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
