class PhusionPassenger::RequestHandler

def wait_until_termination_requested

def wait_until_termination_requested
	ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
	if ruby_engine == "jruby"
		# On JRuby, selecting on an input TTY always returns, so
		# we use threads to do the job.
		owner_pipe_watcher = IO.pipe
		owner_pipe_watcher_thread = Thread.new do
			Thread.current.abort_on_exception = true
			Thread.current[:name] = "Owner pipe waiter"
			begin
				@owner_pipe.read(1)
			ensure
				owner_pipe_watcher[1].write('x')
			end
		end
		begin
			ios = select([owner_pipe_watcher[0], @graceful_termination_pipe[0]])[0]
			if ios.include?(owner_pipe_watcher[0])
				trace(2, "Owner pipe closed")
			else
				trace(2, "Graceful termination pipe closed")
			end
		ensure
			owner_pipe_watcher_thread.kill
			owner_pipe_watcher_thread.join
			owner_pipe_watcher[0].close if !owner_pipe_watcher[0].closed?
			owner_pipe_watcher[1].close if !owner_pipe_watcher[1].closed?
		end
	else
		ios = select([@owner_pipe, @graceful_termination_pipe[0]])[0]
		if ios.include?(@owner_pipe)
			trace(2, "Owner pipe closed")
		else
			trace(2, "Graceful termination pipe closed")
		end
	end
end