102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
return false;
}
waitingTask.next = condition->waitingTasks;
condition->waitingTasks = &waitingTask;
mask = Wait((1ul << waitingTask.sigBit) | *signalMask);
if (mask & (1ul << waitingTask.sigBit))
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.
*/
ret = false;
errno = EINTR;
|
<
|
<
<
|
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
return false;
}
waitingTask.next = condition->waitingTasks;
condition->waitingTasks = &waitingTask;
mask = Wait((1ul << waitingTask.sigBit) | *signalMask);
if (mask & (1ul << waitingTask.sigBit) || (*signalMask &= mask))
ret = of_mutex_lock(mutex);
else {
/*
* This should not happen - it means something interrupted the
* Wait(), so the best we can do is return EINTR.
*/
ret = false;
errno = EINTR;
|
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
waitingTask.next = condition->waitingTasks;
condition->waitingTasks = &waitingTask;
SendIO((struct IORequest *)&request);
mask = Wait((1ul << waitingTask.sigBit) | (1ul << port.mp_SigBit) |
*signalMask);
if (mask & (1ul << waitingTask.sigBit))
ret = of_mutex_lock(mutex);
else if (mask & (1ul << port.mp_SigBit)) {
ret = false;
errno = ETIMEDOUT;
} 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.
*/
ret = false;
errno = EINTR;
}
|
|
<
<
|
|
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
waitingTask.next = condition->waitingTasks;
condition->waitingTasks = &waitingTask;
SendIO((struct IORequest *)&request);
mask = Wait((1ul << waitingTask.sigBit) | (1ul << port.mp_SigBit) |
*signalMask);
if (mask & (1ul << waitingTask.sigBit) || (*signalMask &= mask))
ret = of_mutex_lock(mutex);
else if (mask & (1ul << port.mp_SigBit)) {
ret = false;
errno = ETIMEDOUT;
} else {
/*
* This should not happen - it means something interrupted the
* Wait(), so the best we can do is return EINTR.
*/
ret = false;
errno = EINTR;
}
|