def worker(upgrade, master)
$0 = "puma: cluster worker: #{master}"
Signal.trap "SIGINT", "IGNORE"
@master_read.close
@suicide_pipe.close
Thread.new do
IO.select [@check_pipe]
log "! Detected parent died, dying"
exit! 1
end
if upgrade
if dir = @options[:worker_directory]
log "+ Changing to #{dir}"
Dir.chdir dir
end
end
hooks = @options[:worker_boot]
hooks.each { |h| h.call }
server = start_server
Signal.trap "SIGTERM" do
server.stop
end
begin
@worker_write << "b#{Process.pid}\n"
rescue SystemCallError, IOError
STDERR.puts "Master seems to have exitted, exitting."
return
end
server.run.join
ensure
@worker_write.close
end