Clean up socket and filesystem resources separately

This commit is contained in:
Jack Nagel 2015-04-24 22:13:45 -04:00
parent 16dfe3dd40
commit f7ded45bc7

View File

@ -3,12 +3,13 @@ require "socket"
module Utils
def self.safe_fork(&block)
socket_path = "#{Dir.mktmpdir("homebrew", HOMEBREW_TEMP)}/socket"
server = UNIXServer.new(socket_path)
ENV["HOMEBREW_ERROR_PIPE"] = socket_path
Dir.mktmpdir("homebrew", HOMEBREW_TEMP) do |tmpdir|
UNIXServer.open("#{tmpdir}/socket") do |server|
read, write = IO.pipe
pid = fork do
ENV["HOMEBREW_ERROR_PIPE"] = server.path
begin
server.close
read.close
@ -37,8 +38,7 @@ module Utils
raise Interrupt if $?.exitstatus == 130
raise "Suspicious failure" unless $?.success?
end
ensure
server.close
FileUtils.rm_r File.dirname(socket_path)
end
end
end
end