Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > + * If the "ungroup" option isn't specified the callbacks will get a > + * pointer to a "struct strbuf *out", and must not write to stdout or > + * stderr as such output will mess up the output of the other parallel > + * processes. If "ungroup" option is specified callbacks will get a > + * NULL "struct strbuf *out" parameter, and are responsible for > + * emitting their own output, including dealing with any race > + * conditions due to writing in parallel to stdout and stderr. > */ > int run_processes_parallel(struct run_process_parallel_opts *opts); > > diff --git a/t/helper/test-run-command.c b/t/helper/test-run-command.c > index 56a806f228b..986acbce5f2 100644 > --- a/t/helper/test-run-command.c > +++ b/t/helper/test-run-command.c > @@ -31,7 +31,11 @@ static int parallel_next(struct child_process *cp, > return 0; > > strvec_pushv(&cp->args, d->args.v); > - strbuf_addstr(err, "preloaded output of a child\n"); > + if (err) > + strbuf_addstr(err, "preloaded output of a child\n"); > + else > + fprintf(stderr, "preloaded output of a child\n"); > + This illustrates the intended use of !err and !!err pretty well ;-).