close-on-exec
Alan Coopersmith
alan.coopersmith at oracle.com
Fri Feb 27 17:04:47 PST 2015
On 02/26/15 01:34 AM, Thomas Klausner wrote:
> On Wed, Feb 25, 2015 at 02:27:30PM -0800, Alan Coopersmith wrote:
>> Solaris has the ancient support for setting the FD_CLOEXEC flag via
>> fcntl() in all versions, and the more recent support for the O_CLOEXEC
>> flag to open() in Solaris 11 and later, but does not yet support the
>> "e" flag to fopen(). (I've filed an enhancement request to add it to
>> our libc in the future, but that doesn't help today.)
>>
>> I believe the most portable way to do this is:
>>
>> if (!(addfp = fopen (addAuthFile, "w")))
>> goto bad;
>> else
>> fcntl(fileno(addfp), F_SETFD, FD_CLOEXEC);
>>
>> That would be subject to race conditions in multi-threaded processes, as
>> described in https://udrepper.livejournal.com/20407.html, so not safe in
>> libraries or programs which deliberately start multiple threads, but since
>> xsm is not one of those, it should be mostly safe. (Not completely, because
>> we can't be sure nothing we called in a library didn't start a thread behind
>> the scenes to handle one of our requests, but without an "e" flag everywhere,
>> I'm not sure what more we can do. I have no idea how to write a configure
>> check to test for fopen(..., "e") support either.)
>
> Ok, so let's use fcntl for now, new patch attached.
Is there some reason all the fcntl returns are cast to (void)?
I know we do that in native Solaris code for lint's checks, but I wasn't
aware of other tools requiring that and know a bunch of return casts to
void have been removed from the X code base over the years.
Otherwise, looks reasonable to me.
--
-Alan Coopersmith- alan.coopersmith at oracle.com
Oracle Solaris Engineering - http://blogs.oracle.com/alanc
More information about the xorg-devel
mailing list