# File lib/mongrel/rails.rb, line 58
      def process(request, response)
        if response.socket.closed?
          return
        end

        path_info = request.params[Mongrel::Const::PATH_INFO]
        page_cached = path_info + ".html"
        get_or_head = @@file_only_methods.include? request.params[Mongrel::Const::REQUEST_METHOD]

        if get_or_head and @files.can_serve(path_info)
          # File exists as-is so serve it up
          @files.process(request,response)
        elsif get_or_head and @files.can_serve(page_cached)
          # possible cached page, serve it up
          request.params[Mongrel::Const::PATH_INFO] = page_cached
          @files.process(request,response)
        else
          begin
            cgi = Mongrel::CGIWrapper.new(request, response)
            cgi.handler = self
            # we don't want the output to be really final until we're out of the lock
            cgi.default_really_final = false

            log_threads_waiting_for(request.params["PATH_INFO"]) if $mongrel_debug_client

            @guard.synchronize(:EX) {
              Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body)
            }

            # This finalizes the output using the proper HttpResponse way
            cgi.out("text/html",true) {""}
          rescue Errno::EPIPE
            response.socket.close
          rescue Object => rails_error
            STDERR.puts "#{Time.now}: Error calling Dispatcher.dispatch #{rails_error.inspect}"
            STDERR.puts rails_error.backtrace.join("\n")
          end
        end
      end