@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/futex-queue.d.ts +16 -0
- package/dist/futex-queue.d.ts.map +1 -0
- package/dist/futex-queue.js +171 -0
- package/dist/futex-queue.js.map +1 -0
- package/dist/local-sockets.d.ts +2 -0
- package/dist/local-sockets.d.ts.map +1 -1
- package/dist/local-sockets.js +64 -32
- package/dist/local-sockets.js.map +1 -1
- package/dist/memory.d.ts +3 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +63 -10
- package/dist/memory.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +4 -1
- package/dist/runtime.js.map +1 -1
- package/dist/system.d.ts +4 -70
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +8 -152
- package/dist/system.js.map +1 -1
- package/dist/thread-lifecycle.d.ts +2 -1
- package/dist/thread-lifecycle.d.ts.map +1 -1
- package/dist/thread-lifecycle.js +5 -2
- package/dist/thread-lifecycle.js.map +1 -1
- package/dist/thread-worker.js +9 -41
- package/dist/thread-worker.js.map +1 -1
- package/dist/threads.d.ts +1 -0
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +1 -0
- package/dist/threads.js.map +1 -1
- package/package.json +1 -1
package/dist/system.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
-
*
|
|
494
|
-
*
|
|
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
|
package/dist/system.js.map
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/thread-lifecycle.js
CHANGED
|
@@ -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
|
-
|
|
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":"
|
|
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"}
|
package/dist/thread-worker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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 {
|
|
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 {
|
|
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
|
}
|