After some time, I've finally got annoyed by the SBCL output race
buglet to do something about it.
For those who haven't seen this (either because you don't use sbcl, or
your systems aren't the "right" speed to trigger it), sometimes when
outputting to the dedicated output stream, multiple flushes will be
done to aren't the "right" speed to trigger it), sometimes when
outputting to the dedicated output stream, multiple flushes will be
done at the same time, resulting in something that looks like this
paragraph.
I have a patch that fixes it, but it's a bit of a blunt instrument.
It wraps the streams passed to MAKE-STREAM-INTERACTIVE in a Gray
stream containing a mutex, so that the stream acts as a monitor,
preventing different threads from using it at the same time. (This
changes the semantics of the make-stream-interactive interface; before
it was called for side-effects, now it may or may not have a side
effect and returns an "interactive" stream that may or may not be the
same object as the one it was called with. All the swank backends are
updated in the patch.)
Currently, the patch is sbcl-only. While updating the other backends,
I noticed abcl uses the same "thread which FORCE-OUTPUTs" technique,
but I don't have abcl here, so I don't know if the same race
manifests, if abcl even supports Gray strams, or how to create and use
a mutex if the two previous conditions held.
Is there any interest in this, or does anyone have a better idea how
to approach this bug?
--
Robert Macomber
slime(a)rojoma.com / Thas on #lisp