| 483 | } |
| 484 | |
| 485 | void Semaphore::wait() { |
| 486 | _lock.lock(); |
| 487 | if (_value > 0) { |
| 488 | _value--; |
| 489 | _lock.unlock(); |
| 490 | return; |
| 491 | } |
| 492 | _waiting[_tail] = internals::vmem.current_process; |
| 493 | _signals[_tail] = 0; |
| 494 | next(_tail); |
| 495 | _lock.unlock(); |
| 496 | internals::wait_signal(); |
| 497 | } |
| 498 | |
| 499 | bool Semaphore::start_wait(internals::ipc_signal_t sig) { |
| 500 | _lock.lock(); |
no test coverage detected