<div dir="ltr">Making O_CLOEXEC the default sounds good.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 17, 2017 at 4:00 AM, Pavel Labath via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello all,<br>
<br>
I am looking into using LLVM streams more extensively in LLDB (which<br>
currently rolls it's own stream classes). One of the things that's<br>
missing for me to be able to do that is the ability to open a file<br>
with the O_CLOEXEC flag (to prevent us leaking file descriptors into<br>
the debugged process).<br>
<br>
So I tried adding a F_NonInheritable flag to the raw_fd_ostream<br>
constructor, which would map to O_CLOEXEC on unix, and non-inheritable<br>
handles on windows. However, I encountered a discrepancy in the<br>
current behavior there.<br>
<br>
The current behavior on unix is to make the file descriptors<br>
inheritable (as that is the platform default). On windows, the current<br>
behavior is to make the handles *non*-inheritable (again, because of<br>
platform default). Obviously, if we add this flag, we will probably<br>
need to settle on a default behavior which is consistent across all<br>
platforms.<br>
<br>
Instead of going with the unix choice of inherit-by-default, I propose<br>
to go with the windows behavior where one has to explicitly opt into<br>
file handle inheritance. I believe that is the safer way, as when one<br>
thinks about creating a process, he usually knows which files/handles<br>
it wants it to inherit (so he can specify it), whereas if he is not<br>
creating a process, it does not matter whether it ends up being<br>
inheritable (and he can avoid it leaking by accident!).<br>
<br>
What do you think about this proposal? Does anyone know why this might<br>
be a bad idea?<br>
<br>
PS: Currently the test suite passes on windows&linux regardless of<br>
which way I set the default to be.<br>
<br>
cheers,<br>
pavel<br>
______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br></div>