
poll will return true until the semaphore is blocked again, but before the semaphore is blocked, poll returns false. We do this by maintaining another queue of "released" processes in struct irix_usema_rec. Unblocking causes the waiting process record to be moved to the released queue, and poll check for the process in this released queue.