# File lib/phusion_passenger/abstract_server_collection.rb, line 124
        def lookup_or_add(key)
                raise ArgumentError, "cleanup() has already been called." if @done
                must_be_in_synchronize_block
                server = @collection[key]
                if server
                        register_activity(server)
                        return server
                else
                        server = yield
                        if !server.respond_to?(:start)
                                raise TypeError, "The block didn't return a valid AbstractServer object."
                        end
                        if eligable_for_cleanup?(server)
                                server.next_cleaning_time = Time.now + server.max_idle_time
                                if @next_cleaning_time && server.next_cleaning_time < @next_cleaning_time
                                        @next_cleaning_time = server.next_cleaning_time
                                        @next_cleaning_time_changed = true
                                end
                        end
                        @collection[key] = server
                        return server
                end
        end