it isn't protecting against double wakeups, but instead detects a bug in the code. there's an invariant that the rendez and the process point to each other while the process is asleep. wakeup checks that invariant. there are three primitives (sleep, wakeup and note) and at different times in the past at least one of them has been wrong; it's wise to check the invariant.
>and only disallows waking up a process that's not >sleeping or sleeping on another Rendez. but wakeup doesn't wakeup a particular process, it wakes up exactly the process sleeping on the given Rendez, so the situation can't arise.
