    # 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