[gambit-list] open-process on Windows

Marc Feeley feeley at iro.umontreal.ca
Tue Feb 13 14:28:08 EST 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 22-Jan-07, at 11:02 PM, Aemon Cannon wrote:

> On my Windows XP system, running gambit - 4.0 b20, I'm
> having trouble with the following code:
> **********************************************************
> (let* ((p (open-process "C:/Program Files/GnuWin32/bin/cat.exe")))
>        (display "1" p)
>        (close-output-port p)
>        (let ((bc (read-all p)))
>      (pp bc)))
>
> **********************************************************
> I expect the output to always be:
> (1)
> but about 1/3 of the time I get:
> ()
>
> I can't figure why this code would be inconsistent. The 'cat'  
> implementation is (I think) a direct port of GNU cat. In any case  
> I've had the same problem with other binaries that read from STDIN  
> and write to STDOUT.
>
> I've tried inserting calls to (newline), (force-output), using  
> (write) or (write-char) instead of (display), all to no avail.
>
> Any ideas?

I tried your example (using the "cat.exe" in MSYS) and I consistently  
get (1).  I suspect that there is a race condition in the code, and  
that your machine is either faster or slower than mine causing the  
problem to occur.

You may be able to fix the problem by inserting a call to process- 
status after the close-output-port to wait for the process to  
terminate.  You can give a timeout for the wait like so:

   (process-status p 1.5 999)

This will wait for up to 1.5 seconds and return 999 when the timeout  
is reached.

Marc

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (Darwin)

iD8DBQFF0hFJ//V9Zc2T/v4RAqtwAJ9EO+f46esDkYa1YSGqnIJisj4VJQCeMjXL
pPaZVM7mCPE3Qu7NAZf5co0=
=ukuv
-----END PGP SIGNATURE-----



More information about the Gambit-list mailing list