    # File lib/phusion_passenger/abstract_server_collection.rb, line 44
            def initialize
                    @collection = {}
                    @lock = Mutex.new
                    @cleanup_lock = Mutex.new
                    @cond = ConditionVariable.new
                    @done = false

                    # The next time the cleaner thread should check for idle servers.
                    # The value may be nil, in which case the value will be calculated
                    # at the end of the #synchronized block.
                    #
                    # Invariant:
                    #    if value is not nil:
                    #       There exists an s in @collection with s.next_cleaning_time == value.
                    #       for all s in @collection:
                    #          if eligable_for_cleanup?(s):
                    #             s.next_cleaning_time <= value
                    @next_cleaning_time = Time.now + 60 * 60
                    @next_cleaning_time_changed = false

                    @cleaner_thread = Thread.new do
                            begin
                                    @lock.synchronize do
                                            cleaner_thread_main
                                    end
                            rescue Exception => e
                                    print_exception(self.class.to_s, e)
                            end
                    end
            end