def run_main_loop(options)
$0 = "Passenger AppPreloader: #{options['app_root']}"
client = nil
original_pid = Process.pid
socket_filename = "#{options['generation_dir']}/backends/preloader.#{Process.pid}"
server = UNIXServer.new(socket_filename)
server.close_on_exec!
LoaderSharedHelpers.dump_all_information
puts "!> Ready"
puts "!> socket: unix:#{socket_filename}"
puts "!> "
while true
ios = Kernel.select([server, STDIN])[0]
if ios.include?(server)
result, client = accept_and_process_next_client(server)
if result == :forked
STDIN.reopen(client)
STDOUT.reopen(client)
STDOUT.sync = true
client.close
return :forked
end
end
if ios.include?(STDIN)
if STDIN.tty?
begin
STDIN.read_nonblock(1)
rescue Errno::EAGAIN
end
end
break
end
end
return nil
ensure
server.close if server
if original_pid == Process.pid
File.unlink(socket_filename) rescue nil
end
end