func startManaging()

in Sources/XCTest/Private/WaiterManager.swift [62:94]


    func startManaging(_ waiter: WaiterType, timeout: TimeInterval) {
        guard let thread = thread else { fatalError("\(self) no longer belongs to a thread") }
        precondition(thread === Thread.current, "\(#function) called on wrong thread, must be called on \(thread)")

        var alreadyFinishedOuterWaiter: WaiterType?

        queue.sync {
            // To start managing `waiter`, first see if any existing, outer waiters have already finished,
            // because if one has, then `waiter` will be immediately interrupted before it begins waiting.
            alreadyFinishedOuterWaiter = managedWaiterStack.first(where: { $0.waiter.isFinished })?.waiter

            let watchdog: ManageableWaiterWatchdog?
            if alreadyFinishedOuterWaiter == nil {
                // If there is no already-finished outer waiter, install a watchdog for `waiter`, and store it
                // alongside `waiter` so that it may be canceled if `waiter` finishes waiting within its allotted timeout.
                watchdog = WaiterManager.installWatchdog(for: waiter, timeout: timeout)
            } else {
                // If there is an already-finished outer waiter, no watchdog is needed for `waiter` because it will
                // be interrupted before it begins waiting.
                watchdog = nil
            }

            // Add the waiter even if it's going to immediately be interrupted below to simplify the stack management
            let details = ManagedWaiterDetails(waiter: waiter, watchdog: watchdog)
            managedWaiterStack.append(details)
        }

        if let alreadyFinishedOuterWaiter = alreadyFinishedOuterWaiter {
            XCTWaiter.subsystemQueue.async {
                waiter.queue_interrupt(for: alreadyFinishedOuterWaiter)
            }
        }
    }