|
| From: | Chicken Trac |
| Subject: | Re: [Chicken-janitors] #766: posix: can't collect exit status and close all process ports at the same time |
| Date: | Tue, 27 Dec 2011 19:56:44 -0000 |
#766: posix: can't collect exit status and close all process ports at the same
time
----------------------+-----------------------------------------------------
Reporter: syn | Owner:
Type: defect | Status: new
Priority: major | Milestone: 4.8.0
Component: unknown | Version: 4.7.x
Resolution: | Keywords:
----------------------+-----------------------------------------------------
Comment(by syn):
Here's a naive drop-in replacement of {{{process*}}} which works around
the issue:
{{{
(define (process* #!optional cmd args env)
(let*-values
(((in-in in-out) (create-pipe))
((out-in out-out) (create-pipe))
((err-in err-out) (create-pipe))
((pid) (process-fork
(lambda ()
(duplicate-fileno in-in fileno/stdin)
(duplicate-fileno out-out fileno/stdout)
(duplicate-fileno err-out fileno/stderr)
(file-close in-out)
(file-close in-in)
(file-close out-in)
(file-close out-out)
(file-close err-in)
(file-close err-out)
(process-execute cmd args env)))))
(file-close in-in)
(file-close out-out)
(file-close err-out)
(values (open-input-file* out-in)
(open-output-file* in-out)
pid
(open-input-file* err-in))))
}}}
--
Ticket URL: <http://bugs.call-cc.org/ticket/766#comment:2>
Chicken Scheme <http://www.call-with-current-continuation.org/>
Chicken Scheme is a compiler for the Scheme programming language.
| [Prev in Thread] | Current Thread | [Next in Thread] |