| 29 | } // namespace |
| 30 | |
| 31 | int FutexWait(int* addr, int value, TDuration timeout) |
| 32 | { |
| 33 | struct timespec timeoutSpec; |
| 34 | if (timeout != TDuration::Max()) { |
| 35 | timeoutSpec.tv_sec = timeout.Seconds(); |
| 36 | timeoutSpec.tv_nsec = (timeout - TDuration::Seconds(timeout.Seconds())).MicroSeconds() * 1000; |
| 37 | } |
| 38 | |
| 39 | return Futex( |
| 40 | addr, |
| 41 | FUTEX_WAIT_PRIVATE, |
| 42 | value, |
| 43 | timeout != TDuration::Max() ? &timeoutSpec : nullptr, |
| 44 | nullptr, |
| 45 | 0); |
| 46 | } |
| 47 | |
| 48 | int FutexWake(int* addr, int count) |
| 49 | { |