The problem is that there might be no threads that initiate any wait.
You're probably thinking about synchronous wait. By "initiate the wait" I mean the thread that called NtAssociateWaitCompletionPacket().
Not all waits are synchronous (like WaitForSingleObject). NtAssociateWaitCompletionPacket() initiates an *asynchronous* wait. When the wait is done (the object is signaled), it queues a completion to the associated I/O completion port.