to me this is another argument why unbuffered shouldn't be the default, but "echo is at least line buffered" is the minimum i need to avoid the xargs test flake, so that's all i'm going for today :-)
it's guessable from the mention of xargs, echo, and parallelism, but it was an accident that i forgot to include the specific failure i was seeing, so for completeness: FAIL: xargs max-proc=2 echo -ne 'y\ny\ny\n' | xargs -n 1 -P 2 --- expected 2021-04-24 14:46:41.511976909 +0000 +++ actual 2021-04-24 14:46:41.551976908 +0000 @@ -1,3 +1,3 @@ +yy + y -y -y On Mon, Apr 26, 2021 at 3:43 PM enh <[email protected]> wrote: > This patch does two things: > > 1. Enable line buffering for echo and yes. I found this through test > flakiness from the toybox xargs tests running in CI on devices where > "echo" is provided by toybox. For `echo y`, GNU echo does one write > of "y\n" but toybox echo was doing two writes, which makes it more > likely (4% on the heavily-loaded CI machines) for writes from the two > processes to be interleaved. > > 2. Fix line buffering on glibc if you're calling `toybox foo` rather > than `foo`. Otherwise we come through once and switch to unbuffered > mode, then again and switch to line buffered mode --- which doesn't > seem to actually work in glibc unless you specify a buffer (so > passing toybuf and sizeof(toybuf) works, but NULL and 0 doesn't). > > I hit the second issue trying to reproduce the first issue on the desktop > rather than on Android. > > (If you're scratching your head wondering "why yes(1) too, not just > echo(1)?", that represents a blind alley I went down when I mistook > which tool was in use. It seemed like the same principle should apply, > and it matches what other implementations do.) > --- > main.c | 2 +- > toys/other/yes.c | 2 +- > toys/posix/echo.c | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) >
_______________________________________________ Toybox mailing list [email protected] http://lists.landley.net/listinfo.cgi/toybox-landley.net
