Set close-on-exec on lock file descriptors

The formula locks used by the installer and commands like link and
unlink are backed by open files and flock(). The open file descriptors
are thus leaked to any subprocesses. This can result in weird behavior
in programs spawned from formula that do not expect to inherit these
descriptors.

Fix this by setting close-on-exec on the lock file descriptors.

Fixes Homebrew/homebrew#21486.
This commit is contained in:
Jack Nagel 2013-07-27 23:53:53 -05:00
parent 6242a6d7fa
commit bac6533d5c

View File

@ -1,3 +1,5 @@
require 'fcntl'
class FormulaLock
LOCKDIR = HOMEBREW_CACHE_FORMULA
@ -33,7 +35,9 @@ class FormulaLock
def get_or_create_lockfile
if @lockfile.nil? || @lockfile.closed?
@path.open(File::RDWR | File::CREAT)
@lockfile = @path.open(File::RDWR | File::CREAT)
@lockfile.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
@lockfile
else
@lockfile
end