Skip to content

Commit 1bbf366

Browse files
stephenduong1004sbc100
authored andcommitted
Fix infinite hang in emscripten_futex_wait
This bug was introduced in #26471. This PR is based on #26586. Thanks @stephenduong1004!
1 parent 46543e7 commit 1bbf366

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

system/lib/pthread/emscripten_futex_wait.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ int emscripten_futex_wait(volatile void *addr, uint32_t val, double max_wait_ms)
224224
}
225225
// If remainder_ns is negative it means we want wait forever, and we don't
226226
// need to decrement remainder_ns in that case.
227-
if (wakeup_interval && remainder_ns > 0) {
227+
if (wakeup_interval && remainder_ns >= 0) {
228228
remainder_ns -= wakeup_interval;
229229
if (remainder_ns <= 0) {
230230
break;

test/core/pthread/emscripten_futexes.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ int main() {
1414
rc = emscripten_futex_wait(&futex_value, futex_value, 1);
1515
assert(rc == -ETIMEDOUT);
1616

17+
// As should this.
18+
rc = emscripten_futex_wait(&futex_value, futex_value, 0);
19+
assert(rc == -ETIMEDOUT);
20+
1721
// Check that this thread has removed itself from the wait queue.
1822
rc = emscripten_futex_wake(&futex_value, INT_MAX);
1923
assert(rc == 0);

0 commit comments

Comments
 (0)