{
JSRuntime *rt = JS_GetRuntime(ctx);
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
- int min_delay, nfds;
+ int min_delay, nfds, atomics_async_waker_fd_index;
int64_t cur_time, delay;
JSOSRWHandler *rh;
struct list_head *el;
}
}
+ atomics_async_waker_fd_index = nfds;
if (js_poll_add_poll_fd(ts, &nfds, ts->atomics_async_waker.read_fd, POLLIN))
return -1;
}
}
}
- if (ts->poll_fds[ts->atomics_async_waker.read_fd].revents != 0) {
+ if (ts->poll_fds[atomics_async_waker_fd_index].revents != 0) {
js_waker_clear(&ts->atomics_async_waker);
}
}
break;
case "sab_done":
{
- let buf = ev.buf;
/* check that the SharedArrayBuffer was modified */
- assert(buf[2], 10);
- worker.postMessage({ type: "abort" });
+ assert(ev.buf[2], 10);
+ /* start the waitAsync() test */
+ let sab = new SharedArrayBuffer(4);
+ let buf = new Int32Array(sab);
+ worker.postMessage({ type: "wait_async", buf: buf });
+ }
+ break;
+ case "notify":
+ {
+ let buf = ev.buf;
+ Atomics.store(buf, 0, 1);
+ /* notify the waitAsync() */
+ Atomics.notify(buf, 0, 1);
}
break;
case "done":
ev.buf[2] = 10;
parent.postMessage({ type: "sab_done", buf: ev.buf });
break;
+ case "wait_async":
+ Atomics.waitAsync(ev.buf, 0, 0, Infinity).value.then( () => { parent.postMessage({ type: "done" }); } );
+ parent.postMessage({ type: "notify", buf: ev.buf });
+ break;
}
}