On 09.05.2017 13:18, Petri Latvala wrote: snip 8< ----- >> + memset(buf, 0, sizeof(buf)); >> + while (read(current->read_fd, buf, sizeof(buf)) > 0) { >> + if (current->redirected) { >> + if (!unredirect_output(current)) >> + return -1; >> + } >> + igt_log(IGT_LOG_DOMAIN, current->log_level, >> + "[cmd] %s", buf); >> + memset(buf, 0, sizeof(buf)); >> + } >> + close(current->read_fd); >> + } > > > Unredirect_output calls for both pipes need to be called on all exit > paths. > > In redirect_output you set only the read fd of the pipe() pair to > O_NONBLOCK. That will make the executed command block on its writes > indefinitely if it prints more than whatsitnow, 64kB? > the In case the stream output is more than the pipe buf, the read loop above would just unblock the rest of the entries. From pipe(2) page: "Data written to the write end of the pipe is buffered by the kernel until it is read from the read end of the pipe." Worked well when I tried it with igt_exec("../tools/intel_reg dump") which dumps a screenfull of info. _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx