@@ -104,15 +104,12 @@ waitingTask.next = condition->waitingTasks; condition->waitingTasks = &waitingTask; mask = Wait((1ul << waitingTask.sigBit) | *signalMask); - - if (mask & (1ul << waitingTask.sigBit)) + if (mask & (1ul << waitingTask.sigBit) || (*signalMask &= mask)) ret = of_mutex_lock(mutex); - else if (*signalMask &= mask) - ret = true; else { /* * This should not happen - it means something interrupted the * Wait(), so the best we can do is return EINTR. */ @@ -209,18 +206,16 @@ SendIO((struct IORequest *)&request); mask = Wait((1ul << waitingTask.sigBit) | (1ul << port.mp_SigBit) | *signalMask); - if (mask & (1ul << waitingTask.sigBit)) + if (mask & (1ul << waitingTask.sigBit) || (*signalMask &= mask)) ret = of_mutex_lock(mutex); else if (mask & (1ul << port.mp_SigBit)) { ret = false; errno = ETIMEDOUT; - } else if (*signalMask &= mask) - ret = true; - else { + } else { /* * This should not happen - it means something interrupted the * Wait(), so the best we can do is return EINTR. */ ret = false;