| 512 | } |
| 513 | |
| 514 | bool Semaphore::stop_wait() { |
| 515 | bool result = false; |
| 516 | _lock.lock(); |
| 517 | for (int i = _head; i != _tail; next(i)) { |
| 518 | if (_waiting[i] == internals::vmem.current_process) { |
| 519 | int last = i; |
| 520 | next(i); |
| 521 | while (i != _tail) { |
| 522 | _waiting[last] = _waiting[i]; |
| 523 | _signals[last] = _signals[i]; |
| 524 | last = i; |
| 525 | next(i); |
| 526 | } |
| 527 | _tail = last; |
| 528 | result = true; |
| 529 | break; |
| 530 | } |
| 531 | } |
| 532 | _lock.unlock(); |
| 533 | return result; |
| 534 | } |
| 535 | |
| 536 | void EventSet::add(Event *event) { |
| 537 | event->_next = NULL; |