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.

Reply via email to