@volter/browser-wali 0.1.203 → 0.1.205

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/system.js CHANGED
@@ -1,4 +1,4 @@
1
- import { waliFutexArgumentError, waliFutexCommand } from "./futex-arguments.js";
1
+ import { createWaliFutexQueue, WaliFutexQueue } from "./futex-queue.js";
2
2
  import { createWaliResourceLimits, changeWaliResourceLimit, validWaliResource } from "./resource-limits.js";
3
3
  // Terminal ioctl dispatch translated from Emscripten libsyscall.js (MIT),
4
4
  // 862dc0d48acc4134a0088d27ac8f5dd18baba1cd. Linux termios layout and the
@@ -8,20 +8,8 @@ import { waliCredentialImports } from "./credentials.js";
8
8
  import { waliClockGetTime, waliClockGetResolution } from "./clocks.js";
9
9
  import { createWaliTerminalSettings } from "./tty-settings.js";
10
10
  import { waliTerminalWindowIoctl } from "./terminal-window.js";
11
- import { hostWait } from "./host-idle.js";
12
- import { waliActivityGuard } from "./wait-state.js";
13
- import { monotonicMilliseconds, realtimeMilliseconds } from "./monotonic-clock.js";
14
- const EAGAIN = 11n;
15
11
  const ESRCH = 3n;
16
12
  const EINVAL = 22n;
17
- const ETIMEDOUT = 110n;
18
- const FUTEX_CLOCK_REALTIME = 0x100;
19
- const FUTEX_WAIT = 0;
20
- const FUTEX_WAKE = 1;
21
- const FUTEX_REQUEUE = 3;
22
- const FUTEX_CMP_REQUEUE = 4;
23
- const FUTEX_WAIT_BITSET = 9;
24
- const FUTEX_WAKE_BITSET = 10;
25
13
  const encoder = new TextEncoder();
26
14
  /** Process-wide exit requested by a WALI pthread through exit_group(2). */
27
15
  export class WaliPthreadProcessExit extends Error {
@@ -45,82 +33,7 @@ export class WaliLongjmpUnsupported extends Error {
45
33
  this.name = "WaliLongjmpUnsupported";
46
34
  }
47
35
  }
48
- /**
49
- * FUTEX_REQUEUE and FUTEX_CMP_REQUEUE, for both futex implementations in this
50
- * package: the process's root thread (below) and each pthread worker
51
- * (thread-worker.ts). They share this function because they are answering the
52
- * same kernel contract, and the defect it fixes was invisible for exactly as
53
- * long as the contract was only half-written.
54
- *
55
- * THE OPERATION IS NOT OPTIONAL, and answering ENOSYS is not a degraded mode.
56
- * musl chain-wakes the waiters a `pthread_cond_broadcast` released: the woken
57
- * waiter hands the next one along with `unlock_requeue`, which is
58
- * (wali-musl/src/thread/pthread_cond_timedwait.c:48-54)
59
- *
60
- * static inline void unlock_requeue(volatile int *l, volatile int *r, int w)
61
- * {
62
- * a_store(l, 0);
63
- * if (w) __wake(l, 1, 1);
64
- * else __syscall_SYS_futex(l, FUTEX_REQUEUE|FUTEX_PRIVATE, 0, 1, r, 0) != -ENOSYS
65
- * || __syscall_SYS_futex(l, FUTEX_REQUEUE, 0, 1, r, 0);
66
- * }
67
- *
68
- * — it returns void and DISCARDS both results, so an unimplemented requeue is
69
- * reported to nobody. `a_store(l, 0)` does not wake a parked waiter on Linux
70
- * either; the requeue is the entire wake mechanism. With it missing, the
71
- * second and every later waiter of any broadcast on an ordinary mutex stays
72
- * parked forever. Measured 2026-09-18 on wasm32-wali-linux-musl: a waiter
73
- * parked on the barrier word, `FUTEX_REQUEUE` answered `errno 38 (Function
74
- * not implemented)`, and the waiter was still parked three seconds later.
75
- *
76
- * WHAT THIS IS NOT, recorded because this function was written while chasing
77
- * it and the wrong story is the easy one to re-derive: it is NOT the cause of
78
- * Blender's Cycles render aborting in `ccl::Session::wait()`. That abort
79
- * reaches `std::terminate` through libc++'s `condition_variable::wait`, which
80
- * is `noexcept` and so fails silently, and the obvious reading is that the
81
- * runtime returned an error from a futex. It did not: nothing asks for a
82
- * requeue on that path, and no syscall in those runs returns an error. The
83
- * requeue defect above is real, was found on the way, and is fixed on its own
84
- * evidence; it is a different defect.
85
- *
86
- * WHAT THE CYCLES ABORT ACTUALLY IS, because the reading that replaced this
87
- * one was wrong too and the next reader deserves the end of the story. A
88
- * Cycles BVH worker frees a pointer musl's mallocng refuses (`a_crash` in
89
- * `get_meta`, under `ccl::BVHBuild::create_leaf_node`, deterministic at
90
- * `-t 1`); `throwIfPthreadFailed` below then THROWS out of the main thread's
91
- * parked `SYS_futex`, and the `noexcept` `condition_variable::wait` frame
92
- * turns that foreign exception into `std::terminate`. The main thread's stack
93
- * is a consequence; the free is the defect and it is not in this package.
94
- * `programs/blender/5.2.0/README.md` carries the measurement, including the
95
- * `--debug-memory` run in which the same command renders the frame and writes
96
- * a real PNG.
97
- *
98
- * It was NOT the `!lk.owns_lock()` branch, which this file said for one
99
- * commit. That rested on there being no `SYS_futex` in "the captured trace",
100
- * and the trace in a trap payload is `threadPool.diagnostics(fatalSlot)` --
101
- * the window of the thread that DIED, never the main thread's.
102
- *
103
- * LIMITATION: this is a wake fallback, not Linux requeue. Atomics.wait cannot
104
- * move a parked agent to another word. Waking on the original word lets
105
- * musl's predicate loops make progress, but a raw futex user can observe an
106
- * early return instead of remaining queued at address2. Atomics.notify's
107
- * count also omits waiters Linux would have moved. Exact target queueing,
108
- * return counts and selective bitsets need a kernel-owned futex wait queue.
109
- *
110
- * Both words are validated by the syscall caller before this fallback runs;
111
- * address2 is not used to park or wake anyone here. Argument validation does
112
- * not close the requeue-semantics gap.
113
- */
114
- export function futexRequeue(words, index, command, wakeCount, requeueCount, compareValue) {
115
- wakeCount |= 0;
116
- requeueCount |= 0;
117
- if (wakeCount < 0 || requeueCount < 0)
118
- return -EINVAL;
119
- if (command === FUTEX_CMP_REQUEUE && Atomics.load(words, index) !== (compareValue | 0))
120
- return -EAGAIN;
121
- const total = wakeCount + requeueCount;
122
- return BigInt(Atomics.notify(words, index, total));
123
- }
36
+ // Futex wait state belongs to the process queue shared with every pthread.
124
37
  export class WaliSystemHost {
125
38
  memory;
126
39
  pid;
@@ -143,7 +56,7 @@ export class WaliSystemHost {
143
56
  */
144
57
  threadPoolSize = 1,
145
58
  /** What the process owes a sleep of its main thread (`WaliMemoryManager.growAhead`). */
146
- whileSleeping, descriptorLimits, resourceLimits = createWaliResourceLimits()) {
59
+ whileSleeping, descriptorLimits, resourceLimits = createWaliResourceLimits(), futexState = createWaliFutexQueue(threadPoolSize + 1), futexThread = 0) {
147
60
  this.memory = memory;
148
61
  this.pid = pid;
149
62
  this.terminal = terminal;
@@ -153,7 +66,9 @@ export class WaliSystemHost {
153
66
  this.whileSleeping = whileSleeping;
154
67
  this.descriptorLimits = descriptorLimits;
155
68
  this.resourceLimits = resourceLimits;
69
+ this.futexQueue = new WaliFutexQueue(futexState, futexThread);
156
70
  }
71
+ futexQueue;
157
72
  imports() {
158
73
  return {
159
74
  ...waliCredentialImports(this.memory),
@@ -415,66 +330,7 @@ export class WaliSystemHost {
415
330
  return -25n;
416
331
  }
417
332
  futex(address, operation, value, timeoutPointer, address2 = 0, value3 = 0) {
418
- const error = waliFutexArgumentError(this.memory(), address, operation, timeoutPointer, address2, value3);
419
- if (error !== undefined)
420
- return error;
421
- const words = new Int32Array(this.memory().buffer);
422
- const index = address / 4;
423
- const command = waliFutexCommand(operation);
424
- if (command === FUTEX_WAKE || command === FUTEX_WAKE_BITSET) {
425
- return BigInt(Atomics.notify(words, index, Math.max(0, value)));
426
- }
427
- if (command === FUTEX_REQUEUE || command === FUTEX_CMP_REQUEUE) {
428
- // For these two the timeout slot carries `val2`, the requeue count.
429
- return futexRequeue(words, index, command, value, timeoutPointer, value3);
430
- }
431
- // FUTEX_LOCK_PI and friends stay unimplemented ON PURPOSE, and musl reads
432
- // that answer: pthread_mutexattr_setprotocol probes FUTEX_LOCK_PI and
433
- // reports ENOTSUP for priority inheritance when it gets ENOSYS, so no
434
- // mutex here can ever take the PI path. That is an honest refusal, unlike
435
- // the requeue above, whose caller discards the error.
436
- if (command !== FUTEX_WAIT && command !== FUTEX_WAIT_BITSET)
437
- return -38n;
438
- let timeout;
439
- if (timeoutPointer !== 0) {
440
- this.range(timeoutPointer, 16);
441
- const seconds = this.view().getBigInt64(timeoutPointer, true);
442
- const nanoseconds = this.view().getBigInt64(timeoutPointer + 8, true);
443
- if (seconds < 0n || nanoseconds < 0n || nanoseconds >= 1000000000n)
444
- return -EINVAL;
445
- // Fractional, as nanosleep's: a sub-millisecond timeout is not none.
446
- const milliseconds = Number(seconds) * 1_000 + Number(nanoseconds) / 1_000_000;
447
- timeout = command === FUTEX_WAIT_BITSET
448
- ? Math.max(0, milliseconds - ((operation & FUTEX_CLOCK_REALTIME) !== 0 ? realtimeMilliseconds() : monotonicMilliseconds()))
449
- : milliseconds;
450
- }
451
- try {
452
- // Linux compares the u32 bit pattern; Atomics exposes an i32 view.
453
- value |= 0;
454
- if (Atomics.load(words, index) !== value)
455
- return -EAGAIN;
456
- const deadline = timeout === undefined ? Number.POSITIVE_INFINITY : performanceNow() + timeout;
457
- for (;;) {
458
- this.throwIfPthreadFailed();
459
- const remaining = deadline - performanceNow();
460
- if (remaining <= 0)
461
- return -ETIMEDOUT;
462
- // A main thread holding the filesystem answers the other threads while
463
- // it waits (ADR-0046): one it waits on may be waiting on a request
464
- // only this thread can answer, and wakes this wait when it asks.
465
- const result = hostWait(words, index, value, Math.min(100, remaining), index, { resource: `futex address ${address}`, deadline: Number.isFinite(deadline) ? Date.now() + remaining : null,
466
- guards: waliActivityGuard() });
467
- this.throwIfPthreadFailed();
468
- if (result === "not-equal")
469
- return -EAGAIN;
470
- if (result === "ok")
471
- return 0n;
472
- }
473
- }
474
- catch {
475
- this.throwIfPthreadFailed();
476
- return -EAGAIN;
477
- }
333
+ return this.futexQueue.call(this.memory(), address, operation, value, timeoutPointer, address2, value3, () => this.throwIfPthreadFailed());
478
334
  }
479
335
  /**
480
336
  * A dead pthread must not leave the rest of the process parked forever, so
@@ -490,8 +346,8 @@ export class WaliSystemHost {
490
346
  * then reports `RuntimeError: unreachable` inside a condition variable, with
491
347
  * no mention of the thread that actually died, whose own stack is a
492
348
  * `console.error` line far earlier in the stream. Blender's Cycles render
493
- * cost three separate diagnoses to that shape (see the `futexRequeue`
494
- * docblock above). When an abort surfaces here, look for a
349
+ * was separately diagnosed as a mallocng rejection of a freed pointer
350
+ * (programs/blender/5.2.0/README.md), not a futex errno. When an abort surfaces here, look for a
495
351
  * `[WALI pthread N] ... error:` line first; the presence of a
496
352
  * `WALI pthread diagnostics` block in the trap payload already proves one
497
353
  * happened, because `runtime.ts` only attaches it when `pthreadFatal[1]` was
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { WaliFutexQueue } from "./futex-queue.js";
1
2
  export declare const WALI_THREAD_IDLE = 0;
2
3
  export declare const WALI_THREAD_RUNNING = 1;
3
4
  export declare const WALI_THREAD_RETIRED = 2;
@@ -5,5 +6,5 @@ export declare function reserveWaliThreadSlot(states: Int32Array): number;
5
6
  /** Detach the old tid before publishing availability; stale releases cannot free a new run. */
6
7
  export declare function releaseWaliThreadSlot(states: Int32Array, tids: Int32Array, index: number, tid: number, reusable: boolean): void;
7
8
  /** Linux clear_child_tid: failed userspace stores are ignored at exit. */
8
- export declare function clearWaliChildTid(memory: WebAssembly.Memory, pointer: number): void;
9
+ export declare function clearWaliChildTid(memory: WebAssembly.Memory, pointer: number, queue?: WaliFutexQueue): void;
9
10
  //# sourceMappingURL=thread-lifecycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-lifecycle.d.ts","sourceRoot":"","sources":["../src/thread-lifecycle.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAKhE;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EACxE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAMrD;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAKnF"}
1
+ {"version":3,"file":"thread-lifecycle.d.ts","sourceRoot":"","sources":["../src/thread-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAKhE;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EACxE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAMrD;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,CAM3G"}
@@ -20,11 +20,14 @@ export function releaseWaliThreadSlot(states, tids, index, tid, reusable) {
20
20
  Atomics.compareExchange(states, index, WALI_THREAD_RUNNING, reusable ? WALI_THREAD_IDLE : WALI_THREAD_RETIRED);
21
21
  }
22
22
  /** Linux clear_child_tid: failed userspace stores are ignored at exit. */
23
- export function clearWaliChildTid(memory, pointer) {
23
+ export function clearWaliChildTid(memory, pointer, queue) {
24
24
  if (!Number.isSafeInteger(pointer) || pointer <= 0 || pointer % 4 !== 0 || pointer + 4 > memory.buffer.byteLength)
25
25
  return;
26
26
  const words = new Int32Array(memory.buffer);
27
27
  Atomics.store(words, pointer / 4, 0);
28
- Atomics.notify(words, pointer / 4, 1);
28
+ if (queue)
29
+ queue.wake(pointer, 1);
30
+ else
31
+ Atomics.notify(words, pointer / 4, 1);
29
32
  }
30
33
  //# sourceMappingURL=thread-lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-lifecycle.js","sourceRoot":"","sources":["../src/thread-lifecycle.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,iFAAiF;AACjF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,KAAK,gBAAgB;YAAE,OAAO,KAAK,CAAC;IACvH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB,CAAC,MAAkB,EAAE,IAAgB,EACxE,KAAa,EAAE,GAAW,EAAE,QAAiB;IAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,OAAO;IACrG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9B,yEAAyE;IACzE,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,mBAAmB,EACxD,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;AACvD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,MAA0B,EAAE,OAAe;IAC3E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO;IAC1H,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"thread-lifecycle.js","sourceRoot":"","sources":["../src/thread-lifecycle.ts"],"names":[],"mappings":"AACA,oEAAoE;AACpE,iFAAiF;AACjF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,KAAK,gBAAgB;YAAE,OAAO,KAAK,CAAC;IACvH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB,CAAC,MAAkB,EAAE,IAAgB,EACxE,KAAa,EAAE,GAAW,EAAE,QAAiB;IAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,OAAO;IACrG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9B,yEAAyE;IACzE,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,mBAAmB,EACxD,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;AACvD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,MAA0B,EAAE,OAAe,EAAE,KAAsB;IACnG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO;IAC1H,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -1,4 +1,4 @@
1
- import { waliFutexArgumentError, waliFutexCommand } from "./futex-arguments.js";
1
+ import { WaliFutexQueue } from "./futex-queue.js";
2
2
  import { waliClockNanosleep } from "./nanosleep.js";
3
3
  import { WaliGuestMemoryError } from "./guest-memory-error.js";
4
4
  import { waliRaisesBrokenPipe } from "./socket-flags.js";
@@ -16,7 +16,7 @@ import { normalizeProcessFilesystemPolicy, intersectProcessFilesystemPolicies }
16
16
  import { WaliMemoryManager } from "./memory.js";
17
17
  import { WaliNetworkHost } from "./network.js";
18
18
  import { SharedWaliStdinReader } from "./stdin.js";
19
- import { futexRequeue, WaliSystemHost } from "./system.js";
19
+ import { WaliSystemHost } from "./system.js";
20
20
  import { WaliFileDescriptorTable } from "./filesystem.js";
21
21
  import { WaliFilesystemClient, WaliSharedFileDescriptorHost } from "./filesystem-remote.js";
22
22
  import { createWaliCodecImports, WaliCodecClient } from "./codec-remote.js";
@@ -26,7 +26,7 @@ import { WALI_ENOSYS, waliUnimplementedTraps } from "./capabilities.js";
26
26
  import { WaliSharedPipeHost } from "./shared-pipes.js";
27
27
  import { BROWSER_PROCESS_RESPONSE_BYTES, closeSharedPipe, decodeProcessSnapshot, retainSharedPipe, } from "./process-bridge.js";
28
28
  import { waliClockGetTime } from "./clocks.js";
29
- import { monotonicMilliseconds, realtimeMilliseconds } from "./monotonic-clock.js";
29
+ import { realtimeMilliseconds } from "./monotonic-clock.js";
30
30
  import { PR_WALI } from "./private-tree.js";
31
31
  import { WaliWaitPublisher, setWaliWaitPublisher, waliCall } from "./wait-state.js";
32
32
  class ThreadExit extends Error {
@@ -46,6 +46,8 @@ let threadId = 3;
46
46
  let clearChildTid = 0;
47
47
  let mmapCursor;
48
48
  let sharedMmapRegistry;
49
+ let futexState;
50
+ let futexQueue;
49
51
  let fatalState;
50
52
  let networkChannel;
51
53
  let networkHost;
@@ -173,7 +175,7 @@ function runThread(message) {
173
175
  finally {
174
176
  // The guest has unwound before join wakes or the hosting worker is reused.
175
177
  if (memory)
176
- clearWaliChildTid(memory, clearChildTid);
178
+ clearWaliChildTid(memory, clearChildTid, futexQueue);
177
179
  clearChildTid = 0;
178
180
  setWaliSignalInterruption(undefined);
179
181
  waitPublisher?.retire();
@@ -188,6 +190,8 @@ async function initialize(message) {
188
190
  memory = message.memory;
189
191
  mmapCursor = message.mmapCursor;
190
192
  sharedMmapRegistry = message.sharedMmapRegistry;
193
+ futexState = message.futexState;
194
+ futexQueue = new WaliFutexQueue(message.futexState, message.slotIndex + 1);
191
195
  fatalState = new Int32Array(message.fatalState);
192
196
  descriptors = message.imports;
193
197
  processPid = message.pid;
@@ -347,7 +351,7 @@ function createImports() {
347
351
  };
348
352
  }
349
353
  function threadHandlers() {
350
- const systemImports = new WaliSystemHost(requiredMemory, processPid, stdin, fatalState, terminalAttached, poolSize, undefined, filesystemChannel?.descriptorLimits, filesystemChannel?.resourceLimits).imports();
354
+ const systemImports = new WaliSystemHost(requiredMemory, processPid, stdin, fatalState, terminalAttached, poolSize, undefined, filesystemChannel?.descriptorLimits, filesystemChannel?.resourceLimits, futexState, slotIndex + 1).imports();
351
355
  const ioctl = systemImports.SYS_ioctl;
352
356
  const filesystemClient = filesystemChannel ? new WaliFilesystemClient(filesystemChannel) : undefined;
353
357
  filesystemClient?.wakeThrough(requiredMemory());
@@ -561,9 +565,6 @@ function threadHandlers() {
561
565
  SYS_sigaltstack: (_next, previous) => zeroMemory(Number(previous), 12),
562
566
  SYS_mprotect: () => 0n,
563
567
  SYS_munmap: () => 0n,
564
- // All six of the kernel's arguments: FUTEX_REQUEUE reads the timeout slot
565
- // as a count and needs `uaddr2` and `val3` as well. See futexRequeue.
566
- SYS_futex: (address, operation, value, timeout, address2, value3) => futex(Number(address), Number(operation), Number(value), Number(timeout), Number(address2 ?? 0n), Number(value3 ?? 0n)),
567
568
  SYS_clock_gettime: (clock, pointer) => clockGettime(Number(clock), Number(pointer)),
568
569
  SYS_clock_nanosleep: (clock, flags, request, remaining) => clockNanosleep(Number(clock), Number(flags), Number(request), Number(remaining)),
569
570
  SYS_nanosleep: (request, remaining) => clockNanosleep(1, 0, Number(request), Number(remaining)),
@@ -806,39 +807,6 @@ function zeroMemory(pointer, length) {
806
807
  bytes().fill(0, pointer, pointer + length);
807
808
  return 0n;
808
809
  }
809
- function futex(address, operation, value, timeoutPointer, address2 = 0, value3 = 0) {
810
- const error = waliFutexArgumentError(requiredMemory(), address, operation, timeoutPointer, address2, value3);
811
- if (error !== undefined)
812
- return error;
813
- const words = new Int32Array(requiredMemory().buffer);
814
- const index = address / 4;
815
- const command = waliFutexCommand(operation);
816
- if (command === 1 || command === 10)
817
- return BigInt(Atomics.notify(words, index, Math.max(0, value)));
818
- // A pthread worker is where a missing requeue actually strands a thread: its
819
- // wait below is a single Atomics.wait with no timeout, so a waiter that the
820
- // kernel would have requeued and woken is parked for the life of the
821
- // process. futexRequeue carries the whole argument.
822
- if (command === 3 || command === 4) {
823
- return futexRequeue(words, index, command, value, timeoutPointer, value3);
824
- }
825
- if (command !== 0 && command !== 9)
826
- return -38n;
827
- let timeout;
828
- if (timeoutPointer !== 0) {
829
- const seconds = view().getBigInt64(timeoutPointer, true);
830
- const nanoseconds = view().getBigInt64(timeoutPointer + 8, true);
831
- if (seconds < 0n || nanoseconds < 0n || nanoseconds >= 1000000000n)
832
- return -22n;
833
- // Fractional: a sub-millisecond timeout is not none (as the main thread's, system.ts).
834
- const milliseconds = Number(seconds) * 1_000 + Number(nanoseconds) / 1_000_000;
835
- timeout = command === 9
836
- ? Math.max(0, milliseconds - ((operation & 0x100) !== 0 ? realtimeMilliseconds() : monotonicMilliseconds()))
837
- : milliseconds;
838
- }
839
- const result = Atomics.wait(words, index, value, timeout);
840
- return result === "not-equal" ? -11n : result === "timed-out" ? -110n : 0n;
841
- }
842
810
  function clockGettime(clock, pointer) {
843
811
  return waliClockGetTime(requiredMemory(), clock, pointer);
844
812
  }