[NREPL-21] Sometimes *err*/*out*/value messages are surprisingly ordered Created: 17/Jun/12 Updated: 20/Jun/12 Resolved: 20/Jun/12
|Reporter:||Colin Jones||Assignee:||Chas Emerick|
As described here: https://github.com/technomancy/leiningen/issues/631, the *out*, *err*, and value printing are ordered differently than expected sometimes.
There are 2 things left here:
(2) Calling .println() on the *out*/*err* streams doesn't necessarily flush the stream. Changing this may have performance/network ramifications, but generally it seems like surprising behavior. An example case:
I'd expect two .print() calls to different streams to have undefined ordering, but the other orderings were all surprising.
The attached patch forces flushes to avoid both of these, for (1) immediately before sending the value message, and for (2) on the "normal" PrintStream [autoFlush] cases of println, printf, or format.
Side note: I couldn't get any tests to fail in this scenario, even after doing some reworking of the streams used in tests, but I kept one new test in this patch anyway. Turns out it's hard to write tests that really make sure .flush() gets called.
|Comment by Chas Emerick [ 20/Jun/12 6:58 AM ]|