|
Boost-Build : |
Subject: [Boost-build] [ATTN: Noel] Re: [boost] bjam's use of O_NONBLOCK in execunix.c
From: Rene Rivera (grafikrobot_at_[hidden])
Date: 2010-05-06 23:04:56
Taking this to the build list..
On 5/6/2010 12:29 PM, Dan Gohman wrote:
> Why does bjam on "unix" platforms set the O_NONBLOCK flag when creating
> standard output and error pipes from the child process to the parent process?
>
> https://svn.boost.org/trac/boost/browser/trunk/tools/jam/src/execunix.c#L189
>
> This was introduced in change r38009:
>
> https://svn.boost.org/trac/boost/changeset/38009
>
> The parent process uses select(2) to block and wait for output from children,
> so it doesn't appear to need non-blocking file descriptors.
>
> Child processes are unrelated programs, and it seems mistaken to assume that
> they will want their stdout and stderr to be non-blocking. A project that
> I'm involved in recently had to add code to handle EAGAIN from a write(2) call
> by spinning until it succeeds, and it seems to be fairly common practice.
> It would seem to be better if the parent would just leave the file descriptors
> in blocking mode.
Noel Belcourt wrote the Unix command handling so I don't have an answer
as to why. Noel any comment?
-- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org (msn) - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim,yahoo,skype,efnet,gmail
Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk