@volter/browser-wali 0.1.202 → 0.1.204
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/events.d.ts +0 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +19 -28
- package/dist/events.js.map +1 -1
- package/dist/filesystem-host-session.js +2 -2
- package/dist/filesystem-host-session.js.map +1 -1
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +14 -10
- package/dist/filesystem.js.map +1 -1
- 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/guest-memory-error.d.ts +7 -0
- package/dist/guest-memory-error.d.ts.map +1 -0
- package/dist/guest-memory-error.js +11 -0
- package/dist/guest-memory-error.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 +14 -2
- package/dist/runtime.js.map +1 -1
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +1 -0
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +37 -12
- package/dist/signals.js.map +1 -1
- package/dist/system.d.ts +4 -70
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +21 -159
- 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 +19 -42
- 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/dist/write-vector.js +2 -2
- package/dist/write-vector.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),
|
|
@@ -292,11 +207,12 @@ export class WaliSystemHost {
|
|
|
292
207
|
return 0n;
|
|
293
208
|
}
|
|
294
209
|
setLimit(resource, pointer) {
|
|
295
|
-
if (!validWaliResource(resource))
|
|
296
|
-
return -EINVAL;
|
|
297
210
|
if (!this.limitPointer(pointer))
|
|
298
211
|
return -14n;
|
|
299
|
-
|
|
212
|
+
const requested = [this.view().getBigUint64(pointer, true), this.view().getBigUint64(pointer + 8, true)];
|
|
213
|
+
if (!validWaliResource(resource))
|
|
214
|
+
return -EINVAL;
|
|
215
|
+
return this.changeLimit(resource, requested).result;
|
|
300
216
|
}
|
|
301
217
|
limitPointer(pointer) {
|
|
302
218
|
return Number.isSafeInteger(pointer) && pointer > 0 && pointer + 16 <= this.memory().buffer.byteLength;
|
|
@@ -320,19 +236,24 @@ export class WaliSystemHost {
|
|
|
320
236
|
return changeWaliResourceLimit(this.resourceLimits, resource, next);
|
|
321
237
|
}
|
|
322
238
|
processLimit(pid, resource, next, previous) {
|
|
239
|
+
// Linux v6.12 kernel/sys.c copies new_rlim before task/resource lookup.
|
|
240
|
+
// Capture input before output: prlimit accepts the same address for both.
|
|
241
|
+
if (next !== 0 && !this.limitPointer(next))
|
|
242
|
+
return -14n;
|
|
243
|
+
const requested = next === 0 ? undefined : [this.view().getBigUint64(next, true), this.view().getBigUint64(next + 8, true)];
|
|
323
244
|
if (pid !== 0 && pid !== this.pid)
|
|
324
245
|
return -ESRCH;
|
|
325
246
|
if (!validWaliResource(resource))
|
|
326
247
|
return -EINVAL;
|
|
327
|
-
if ((next !== 0 && !this.limitPointer(next)) || (previous !== 0 && !this.limitPointer(previous)))
|
|
328
|
-
return -14n;
|
|
329
|
-
// Copy input before output: prlimit accepts the same address for both.
|
|
330
|
-
const requested = next === 0 ? undefined : [this.view().getBigUint64(next, true), this.view().getBigUint64(next + 8, true)];
|
|
331
248
|
const change = this.changeLimit(resource, requested);
|
|
332
249
|
if (change.result !== 0n)
|
|
333
250
|
return change.result;
|
|
334
251
|
const old = change.previous;
|
|
335
252
|
if (previous !== 0) {
|
|
253
|
+
// do_prlimit has already committed. A fault here must not restore the
|
|
254
|
+
// previous pair or allow another writer to bypass a lowered hard limit.
|
|
255
|
+
if (!this.limitPointer(previous))
|
|
256
|
+
return -14n;
|
|
336
257
|
this.view().setBigUint64(previous, old[0], true);
|
|
337
258
|
this.view().setBigUint64(previous + 8, old[1], true);
|
|
338
259
|
}
|
|
@@ -409,66 +330,7 @@ export class WaliSystemHost {
|
|
|
409
330
|
return -25n;
|
|
410
331
|
}
|
|
411
332
|
futex(address, operation, value, timeoutPointer, address2 = 0, value3 = 0) {
|
|
412
|
-
|
|
413
|
-
if (error !== undefined)
|
|
414
|
-
return error;
|
|
415
|
-
const words = new Int32Array(this.memory().buffer);
|
|
416
|
-
const index = address / 4;
|
|
417
|
-
const command = waliFutexCommand(operation);
|
|
418
|
-
if (command === FUTEX_WAKE || command === FUTEX_WAKE_BITSET) {
|
|
419
|
-
return BigInt(Atomics.notify(words, index, Math.max(0, value)));
|
|
420
|
-
}
|
|
421
|
-
if (command === FUTEX_REQUEUE || command === FUTEX_CMP_REQUEUE) {
|
|
422
|
-
// For these two the timeout slot carries `val2`, the requeue count.
|
|
423
|
-
return futexRequeue(words, index, command, value, timeoutPointer, value3);
|
|
424
|
-
}
|
|
425
|
-
// FUTEX_LOCK_PI and friends stay unimplemented ON PURPOSE, and musl reads
|
|
426
|
-
// that answer: pthread_mutexattr_setprotocol probes FUTEX_LOCK_PI and
|
|
427
|
-
// reports ENOTSUP for priority inheritance when it gets ENOSYS, so no
|
|
428
|
-
// mutex here can ever take the PI path. That is an honest refusal, unlike
|
|
429
|
-
// the requeue above, whose caller discards the error.
|
|
430
|
-
if (command !== FUTEX_WAIT && command !== FUTEX_WAIT_BITSET)
|
|
431
|
-
return -38n;
|
|
432
|
-
let timeout;
|
|
433
|
-
if (timeoutPointer !== 0) {
|
|
434
|
-
this.range(timeoutPointer, 16);
|
|
435
|
-
const seconds = this.view().getBigInt64(timeoutPointer, true);
|
|
436
|
-
const nanoseconds = this.view().getBigInt64(timeoutPointer + 8, true);
|
|
437
|
-
if (seconds < 0n || nanoseconds < 0n || nanoseconds >= 1000000000n)
|
|
438
|
-
return -EINVAL;
|
|
439
|
-
// Fractional, as nanosleep's: a sub-millisecond timeout is not none.
|
|
440
|
-
const milliseconds = Number(seconds) * 1_000 + Number(nanoseconds) / 1_000_000;
|
|
441
|
-
timeout = command === FUTEX_WAIT_BITSET
|
|
442
|
-
? Math.max(0, milliseconds - ((operation & FUTEX_CLOCK_REALTIME) !== 0 ? realtimeMilliseconds() : monotonicMilliseconds()))
|
|
443
|
-
: milliseconds;
|
|
444
|
-
}
|
|
445
|
-
try {
|
|
446
|
-
// Linux compares the u32 bit pattern; Atomics exposes an i32 view.
|
|
447
|
-
value |= 0;
|
|
448
|
-
if (Atomics.load(words, index) !== value)
|
|
449
|
-
return -EAGAIN;
|
|
450
|
-
const deadline = timeout === undefined ? Number.POSITIVE_INFINITY : performanceNow() + timeout;
|
|
451
|
-
for (;;) {
|
|
452
|
-
this.throwIfPthreadFailed();
|
|
453
|
-
const remaining = deadline - performanceNow();
|
|
454
|
-
if (remaining <= 0)
|
|
455
|
-
return -ETIMEDOUT;
|
|
456
|
-
// A main thread holding the filesystem answers the other threads while
|
|
457
|
-
// it waits (ADR-0046): one it waits on may be waiting on a request
|
|
458
|
-
// only this thread can answer, and wakes this wait when it asks.
|
|
459
|
-
const result = hostWait(words, index, value, Math.min(100, remaining), index, { resource: `futex address ${address}`, deadline: Number.isFinite(deadline) ? Date.now() + remaining : null,
|
|
460
|
-
guards: waliActivityGuard() });
|
|
461
|
-
this.throwIfPthreadFailed();
|
|
462
|
-
if (result === "not-equal")
|
|
463
|
-
return -EAGAIN;
|
|
464
|
-
if (result === "ok")
|
|
465
|
-
return 0n;
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
catch {
|
|
469
|
-
this.throwIfPthreadFailed();
|
|
470
|
-
return -EAGAIN;
|
|
471
|
-
}
|
|
333
|
+
return this.futexQueue.call(this.memory(), address, operation, value, timeoutPointer, address2, value3, () => this.throwIfPthreadFailed());
|
|
472
334
|
}
|
|
473
335
|
/**
|
|
474
336
|
* A dead pthread must not leave the rest of the process parked forever, so
|
|
@@ -484,8 +346,8 @@ export class WaliSystemHost {
|
|
|
484
346
|
* then reports `RuntimeError: unreachable` inside a condition variable, with
|
|
485
347
|
* no mention of the thread that actually died, whose own stack is a
|
|
486
348
|
* `console.error` line far earlier in the stream. Blender's Cycles render
|
|
487
|
-
*
|
|
488
|
-
*
|
|
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
|
|
489
351
|
* `[WALI pthread N] ... error:` line first; the presence of a
|
|
490
352
|
* `WALI pthread diagnostics` block in the trap payload already proves one
|
|
491
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,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { WaliFutexQueue } from "./futex-queue.js";
|
|
2
2
|
import { waliClockNanosleep } from "./nanosleep.js";
|
|
3
|
+
import { WaliGuestMemoryError } from "./guest-memory-error.js";
|
|
3
4
|
import { waliRaisesBrokenPipe } from "./socket-flags.js";
|
|
4
5
|
import { createWaliEnvironmentImports } from "./environment.js";
|
|
5
6
|
import { waliTerminalAccess, waliTerminalOperation, waliTerminalSettingsIoctl } from "./tty-job-control.js";
|
|
@@ -15,7 +16,7 @@ import { normalizeProcessFilesystemPolicy, intersectProcessFilesystemPolicies }
|
|
|
15
16
|
import { WaliMemoryManager } from "./memory.js";
|
|
16
17
|
import { WaliNetworkHost } from "./network.js";
|
|
17
18
|
import { SharedWaliStdinReader } from "./stdin.js";
|
|
18
|
-
import {
|
|
19
|
+
import { WaliSystemHost } from "./system.js";
|
|
19
20
|
import { WaliFileDescriptorTable } from "./filesystem.js";
|
|
20
21
|
import { WaliFilesystemClient, WaliSharedFileDescriptorHost } from "./filesystem-remote.js";
|
|
21
22
|
import { createWaliCodecImports, WaliCodecClient } from "./codec-remote.js";
|
|
@@ -25,7 +26,7 @@ import { WALI_ENOSYS, waliUnimplementedTraps } from "./capabilities.js";
|
|
|
25
26
|
import { WaliSharedPipeHost } from "./shared-pipes.js";
|
|
26
27
|
import { BROWSER_PROCESS_RESPONSE_BYTES, closeSharedPipe, decodeProcessSnapshot, retainSharedPipe, } from "./process-bridge.js";
|
|
27
28
|
import { waliClockGetTime } from "./clocks.js";
|
|
28
|
-
import {
|
|
29
|
+
import { realtimeMilliseconds } from "./monotonic-clock.js";
|
|
29
30
|
import { PR_WALI } from "./private-tree.js";
|
|
30
31
|
import { WaliWaitPublisher, setWaliWaitPublisher, waliCall } from "./wait-state.js";
|
|
31
32
|
class ThreadExit extends Error {
|
|
@@ -45,6 +46,8 @@ let threadId = 3;
|
|
|
45
46
|
let clearChildTid = 0;
|
|
46
47
|
let mmapCursor;
|
|
47
48
|
let sharedMmapRegistry;
|
|
49
|
+
let futexState;
|
|
50
|
+
let futexQueue;
|
|
48
51
|
let fatalState;
|
|
49
52
|
let networkChannel;
|
|
50
53
|
let networkHost;
|
|
@@ -172,7 +175,7 @@ function runThread(message) {
|
|
|
172
175
|
finally {
|
|
173
176
|
// The guest has unwound before join wakes or the hosting worker is reused.
|
|
174
177
|
if (memory)
|
|
175
|
-
clearWaliChildTid(memory, clearChildTid);
|
|
178
|
+
clearWaliChildTid(memory, clearChildTid, futexQueue);
|
|
176
179
|
clearChildTid = 0;
|
|
177
180
|
setWaliSignalInterruption(undefined);
|
|
178
181
|
waitPublisher?.retire();
|
|
@@ -187,6 +190,8 @@ async function initialize(message) {
|
|
|
187
190
|
memory = message.memory;
|
|
188
191
|
mmapCursor = message.mmapCursor;
|
|
189
192
|
sharedMmapRegistry = message.sharedMmapRegistry;
|
|
193
|
+
futexState = message.futexState;
|
|
194
|
+
futexQueue = new WaliFutexQueue(message.futexState, message.slotIndex + 1);
|
|
190
195
|
fatalState = new Int32Array(message.fatalState);
|
|
191
196
|
descriptors = message.imports;
|
|
192
197
|
processPid = message.pid;
|
|
@@ -297,7 +302,15 @@ function createImports() {
|
|
|
297
302
|
if (access !== 0n)
|
|
298
303
|
return access;
|
|
299
304
|
}
|
|
300
|
-
|
|
305
|
+
let value;
|
|
306
|
+
try {
|
|
307
|
+
value = handler(...args);
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
if (!(error instanceof WaliGuestMemoryError))
|
|
311
|
+
throw error;
|
|
312
|
+
return error.result;
|
|
313
|
+
}
|
|
301
314
|
if ((descriptor.name === "SYS_open" || descriptor.name === "SYS_openat")
|
|
302
315
|
&& typeof value === "bigint" && value >= 0n && fileDescriptors?.terminalFd(Number(value))) {
|
|
303
316
|
const attached = kernelProcesses?.call("ttyopen") ?? (terminalAttached ? 0n : -6n);
|
|
@@ -338,7 +351,7 @@ function createImports() {
|
|
|
338
351
|
};
|
|
339
352
|
}
|
|
340
353
|
function threadHandlers() {
|
|
341
|
-
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();
|
|
342
355
|
const ioctl = systemImports.SYS_ioctl;
|
|
343
356
|
const filesystemClient = filesystemChannel ? new WaliFilesystemClient(filesystemChannel) : undefined;
|
|
344
357
|
filesystemClient?.wakeThrough(requiredMemory());
|
|
@@ -552,9 +565,6 @@ function threadHandlers() {
|
|
|
552
565
|
SYS_sigaltstack: (_next, previous) => zeroMemory(Number(previous), 12),
|
|
553
566
|
SYS_mprotect: () => 0n,
|
|
554
567
|
SYS_munmap: () => 0n,
|
|
555
|
-
// All six of the kernel's arguments: FUTEX_REQUEUE reads the timeout slot
|
|
556
|
-
// as a count and needs `uaddr2` and `val3` as well. See futexRequeue.
|
|
557
|
-
SYS_futex: (address, operation, value, timeout, address2, value3) => futex(Number(address), Number(operation), Number(value), Number(timeout), Number(address2 ?? 0n), Number(value3 ?? 0n)),
|
|
558
568
|
SYS_clock_gettime: (clock, pointer) => clockGettime(Number(clock), Number(pointer)),
|
|
559
569
|
SYS_clock_nanosleep: (clock, flags, request, remaining) => clockNanosleep(Number(clock), Number(flags), Number(request), Number(remaining)),
|
|
560
570
|
SYS_nanosleep: (request, remaining) => clockNanosleep(1, 0, Number(request), Number(remaining)),
|
|
@@ -797,39 +807,6 @@ function zeroMemory(pointer, length) {
|
|
|
797
807
|
bytes().fill(0, pointer, pointer + length);
|
|
798
808
|
return 0n;
|
|
799
809
|
}
|
|
800
|
-
function futex(address, operation, value, timeoutPointer, address2 = 0, value3 = 0) {
|
|
801
|
-
const error = waliFutexArgumentError(requiredMemory(), address, operation, timeoutPointer, address2, value3);
|
|
802
|
-
if (error !== undefined)
|
|
803
|
-
return error;
|
|
804
|
-
const words = new Int32Array(requiredMemory().buffer);
|
|
805
|
-
const index = address / 4;
|
|
806
|
-
const command = waliFutexCommand(operation);
|
|
807
|
-
if (command === 1 || command === 10)
|
|
808
|
-
return BigInt(Atomics.notify(words, index, Math.max(0, value)));
|
|
809
|
-
// A pthread worker is where a missing requeue actually strands a thread: its
|
|
810
|
-
// wait below is a single Atomics.wait with no timeout, so a waiter that the
|
|
811
|
-
// kernel would have requeued and woken is parked for the life of the
|
|
812
|
-
// process. futexRequeue carries the whole argument.
|
|
813
|
-
if (command === 3 || command === 4) {
|
|
814
|
-
return futexRequeue(words, index, command, value, timeoutPointer, value3);
|
|
815
|
-
}
|
|
816
|
-
if (command !== 0 && command !== 9)
|
|
817
|
-
return -38n;
|
|
818
|
-
let timeout;
|
|
819
|
-
if (timeoutPointer !== 0) {
|
|
820
|
-
const seconds = view().getBigInt64(timeoutPointer, true);
|
|
821
|
-
const nanoseconds = view().getBigInt64(timeoutPointer + 8, true);
|
|
822
|
-
if (seconds < 0n || nanoseconds < 0n || nanoseconds >= 1000000000n)
|
|
823
|
-
return -22n;
|
|
824
|
-
// Fractional: a sub-millisecond timeout is not none (as the main thread's, system.ts).
|
|
825
|
-
const milliseconds = Number(seconds) * 1_000 + Number(nanoseconds) / 1_000_000;
|
|
826
|
-
timeout = command === 9
|
|
827
|
-
? Math.max(0, milliseconds - ((operation & 0x100) !== 0 ? realtimeMilliseconds() : monotonicMilliseconds()))
|
|
828
|
-
: milliseconds;
|
|
829
|
-
}
|
|
830
|
-
const result = Atomics.wait(words, index, value, timeout);
|
|
831
|
-
return result === "not-equal" ? -11n : result === "timed-out" ? -110n : 0n;
|
|
832
|
-
}
|
|
833
810
|
function clockGettime(clock, pointer) {
|
|
834
811
|
return waliClockGetTime(requiredMemory(), clock, pointer);
|
|
835
812
|
}
|