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