Thanks --- I've pushed a repair.
At Wed, 20 Jun 2012 20:25:35 -0400, Tony Garnock-Jones wrote: > Sorry, I should have filed a bug report instead of mailing the list. I'm > filing the report now. > > On 2012-06-20 8:22 PM, Tony Garnock-Jones wrote: > > Hi all, > > > > I think I've found a bug in Racket's I/O. Please interpret the following > > text as relating to the attached tarball with a small example of the > > problem. The problem manifests for me on both platforms I've tried, OS X > > and Linux. > > > > When `sync`ing on `read-bytes-evt` at the same time as on `alarm-evt`, > > it seems that if the `read-bytes-evt` would have come ready but the > > `alarm-evt` is the one actually chosen, the input from > > `read-bytes-evt` gets corrupted. This only seems to happen if a single > > `read-bytes-evt` instance is reused! If a fresh `read-bytes-evt` is > > constructed every time, the input stream remains uncorrupted. > > > > To see this, run `racket buggy-server.rkt 0`, which uses a single > > `read-bytes-evt` instance but does not use any `alarm-evt` > > instances. In another terminal, run `./run-test-osx.sh` (or > > `./run-test-linux.sh`, as appropriate). The program > > `./run-test-osx.sh` should terminate without producing any output. > > > > Now, kill off the instance of `buggy-server.rkt`, and start another, > > this time by running `racket buggy-server.rkt 1`. This instance uses > > both a single `read-bytes-evt` instance and an `alarm-evt` > > instance. Now, running `./run-test-osx.sh` should still produce no > > output, but in fact on most runs, some output (from diffing the input > > against the output of the socket) is produced, meaning that the echoed > > output differed from the input. > > > > Regards, > > Tony > > > > > > > > _________________________ > > Racket Developers list: > > http://lists.racket-lang.org/dev > > > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev