@volter/browser-wali 0.1.165 → 0.1.167
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/LICENSE +8 -0
- package/README.md +9 -0
- package/dist/browser-wali-command.d.ts +7 -0
- package/dist/browser-wali-command.d.ts.map +1 -1
- package/dist/browser-wali-command.js +70 -18
- package/dist/browser-wali-command.js.map +1 -1
- package/dist/bulk-memory.d.ts +4 -2
- package/dist/bulk-memory.d.ts.map +1 -1
- package/dist/bulk-memory.js +32 -9
- package/dist/bulk-memory.js.map +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +5 -2
- package/dist/capabilities.js.map +1 -1
- package/dist/child-processes.d.ts +2 -0
- package/dist/child-processes.d.ts.map +1 -1
- package/dist/child-processes.js +9 -1
- package/dist/child-processes.js.map +1 -1
- package/dist/clocks.d.ts +3 -0
- package/dist/clocks.d.ts.map +1 -0
- package/dist/clocks.js +44 -0
- package/dist/clocks.js.map +1 -0
- package/dist/coherent-file-locks.d.ts.map +1 -1
- package/dist/coherent-file-locks.js +2 -1
- package/dist/coherent-file-locks.js.map +1 -1
- package/dist/credentials.d.ts +4 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +46 -0
- package/dist/credentials.js.map +1 -0
- package/dist/descriptors.d.ts +14 -0
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +45 -5
- package/dist/descriptors.js.map +1 -1
- package/dist/environment.d.ts +4 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +23 -0
- package/dist/environment.js.map +1 -0
- package/dist/epoll-ready.d.ts +27 -0
- package/dist/epoll-ready.d.ts.map +1 -0
- package/dist/epoll-ready.js +88 -0
- package/dist/epoll-ready.js.map +1 -0
- package/dist/events.d.ts +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +55 -24
- package/dist/events.js.map +1 -1
- package/dist/filesystem-host-session.d.ts +65 -0
- package/dist/filesystem-host-session.d.ts.map +1 -0
- package/dist/filesystem-host-session.js +951 -0
- package/dist/filesystem-host-session.js.map +1 -0
- package/dist/filesystem-host.d.ts +13 -81
- package/dist/filesystem-host.d.ts.map +1 -1
- package/dist/filesystem-host.js +14 -882
- package/dist/filesystem-host.js.map +1 -1
- package/dist/filesystem-protocol.d.ts +3 -1
- package/dist/filesystem-protocol.d.ts.map +1 -1
- package/dist/filesystem-remote.d.ts +8 -3
- package/dist/filesystem-remote.d.ts.map +1 -1
- package/dist/filesystem-remote.js +42 -20
- package/dist/filesystem-remote.js.map +1 -1
- package/dist/filesystem-service-client.d.ts +4 -0
- package/dist/filesystem-service-client.d.ts.map +1 -0
- package/dist/filesystem-service-client.js +16 -0
- package/dist/filesystem-service-client.js.map +1 -0
- package/dist/filesystem.d.ts +25 -4
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +548 -169
- package/dist/filesystem.js.map +1 -1
- package/dist/fork-memory.d.ts +23 -0
- package/dist/fork-memory.d.ts.map +1 -0
- package/dist/fork-memory.js +93 -0
- package/dist/fork-memory.js.map +1 -0
- package/dist/fork-worker.js +32 -11
- package/dist/fork-worker.js.map +1 -1
- package/dist/jumps.d.ts +7 -0
- package/dist/jumps.d.ts.map +1 -1
- package/dist/jumps.js +19 -1
- package/dist/jumps.js.map +1 -1
- package/dist/kernel-filesystem-worker.d.ts +2 -0
- package/dist/kernel-filesystem-worker.d.ts.map +1 -0
- package/dist/kernel-filesystem-worker.js +28 -0
- package/dist/kernel-filesystem-worker.js.map +1 -0
- package/dist/kernel-filesystem.d.ts +12 -0
- package/dist/kernel-filesystem.d.ts.map +1 -0
- package/dist/kernel-filesystem.js +45 -0
- package/dist/kernel-filesystem.js.map +1 -0
- package/dist/kernel-network-worker.d.ts +2 -0
- package/dist/kernel-network-worker.d.ts.map +1 -0
- package/dist/kernel-network-worker.js +14 -0
- package/dist/kernel-network-worker.js.map +1 -0
- package/dist/kernel-network.d.ts +14 -0
- package/dist/kernel-network.d.ts.map +1 -0
- package/dist/kernel-network.js +50 -0
- package/dist/kernel-network.js.map +1 -0
- package/dist/kernel-process-client.d.ts +6 -1
- package/dist/kernel-process-client.d.ts.map +1 -1
- package/dist/kernel-process-client.js +10 -1
- package/dist/kernel-process-client.js.map +1 -1
- package/dist/memory.d.ts +5 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +7 -3
- package/dist/memory.js.map +1 -1
- package/dist/module-layout.d.ts +8 -0
- package/dist/module-layout.d.ts.map +1 -1
- package/dist/module-layout.js +263 -2
- package/dist/module-layout.js.map +1 -1
- package/dist/network-host.d.ts +6 -0
- package/dist/network-host.d.ts.map +1 -0
- package/dist/network-host.js +1582 -0
- package/dist/network-host.js.map +1 -0
- package/dist/network-protocol.d.ts +9 -2
- package/dist/network-protocol.d.ts.map +1 -1
- package/dist/network-protocol.js +3 -0
- package/dist/network-protocol.js.map +1 -1
- package/dist/network-service-client.d.ts +4 -0
- package/dist/network-service-client.d.ts.map +1 -0
- package/dist/network-service-client.js +16 -0
- package/dist/network-service-client.js.map +1 -0
- package/dist/network-worker.js +5 -1150
- package/dist/network-worker.js.map +1 -1
- package/dist/network.d.ts +13 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +175 -48
- package/dist/network.js.map +1 -1
- package/dist/paths.d.ts +11 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +97 -0
- package/dist/paths.js.map +1 -0
- package/dist/process-bridge.d.ts +12 -4
- package/dist/process-bridge.d.ts.map +1 -1
- package/dist/process-bridge.js +53 -17
- package/dist/process-bridge.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +8 -0
- package/dist/program.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +163 -99
- package/dist/runtime.js.map +1 -1
- package/dist/shared-buffer-pool.d.ts +18 -5
- package/dist/shared-buffer-pool.d.ts.map +1 -1
- package/dist/shared-buffer-pool.js +86 -14
- package/dist/shared-buffer-pool.js.map +1 -1
- package/dist/shared-file-layer.d.ts +3 -1
- package/dist/shared-file-layer.d.ts.map +1 -1
- package/dist/shared-file-layer.js +150 -35
- package/dist/shared-file-layer.js.map +1 -1
- package/dist/shared-pipes.d.ts +3 -1
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +105 -33
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signal-interruption.d.ts +9 -0
- package/dist/signal-interruption.d.ts.map +1 -0
- package/dist/signal-interruption.js +6 -0
- package/dist/signal-interruption.js.map +1 -0
- package/dist/signals.d.ts +17 -6
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +101 -22
- package/dist/signals.js.map +1 -1
- package/dist/snapshot-filesystem.d.ts +1 -0
- package/dist/snapshot-filesystem.d.ts.map +1 -1
- package/dist/snapshot-filesystem.js +3 -0
- package/dist/snapshot-filesystem.js.map +1 -1
- package/dist/socket-flags.d.ts +3 -0
- package/dist/socket-flags.d.ts.map +1 -0
- package/dist/socket-flags.js +9 -0
- package/dist/socket-flags.js.map +1 -0
- package/dist/special-files.d.ts +6 -0
- package/dist/special-files.d.ts.map +1 -0
- package/dist/special-files.js +56 -0
- package/dist/special-files.js.map +1 -0
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +13 -5
- package/dist/stdin.js.map +1 -1
- package/dist/symlink.d.ts +2 -1
- package/dist/symlink.d.ts.map +1 -1
- package/dist/symlink.js +25 -93
- package/dist/symlink.js.map +1 -1
- package/dist/system.d.ts +2 -4
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +46 -29
- package/dist/system.js.map +1 -1
- package/dist/thread-coordinator-worker.js +58 -24
- package/dist/thread-coordinator-worker.js.map +1 -1
- package/dist/thread-lifecycle.d.ts +9 -0
- package/dist/thread-lifecycle.d.ts.map +1 -0
- package/dist/thread-lifecycle.js +30 -0
- package/dist/thread-lifecycle.js.map +1 -0
- package/dist/thread-worker.js +125 -44
- package/dist/thread-worker.js.map +1 -1
- package/dist/threads.d.ts +6 -0
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +46 -6
- package/dist/threads.js.map +1 -1
- package/dist/tty-job-control.d.ts +13 -0
- package/dist/tty-job-control.d.ts.map +1 -0
- package/dist/tty-job-control.js +56 -0
- package/dist/tty-job-control.js.map +1 -0
- package/dist/tty-settings.d.ts +3 -0
- package/dist/tty-settings.d.ts.map +1 -0
- package/dist/tty-settings.js +25 -0
- package/dist/tty-settings.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wait-state.d.ts +8 -0
- package/dist/wait-state.d.ts.map +1 -1
- package/dist/wait-state.js +15 -0
- package/dist/wait-state.js.map +1 -1
- package/dist/worker-program-protocol.d.ts +22 -2
- package/dist/worker-program-protocol.d.ts.map +1 -1
- package/dist/worker-program-worker.js +40 -10
- package/dist/worker-program-worker.js.map +1 -1
- package/dist/worker-program.d.ts +12 -2
- package/dist/worker-program.d.ts.map +1 -1
- package/dist/worker-program.js +214 -36
- package/dist/worker-program.js.map +1 -1
- package/dist/write-vector.d.ts +3 -0
- package/dist/write-vector.d.ts.map +1 -0
- package/dist/write-vector.js +35 -0
- package/dist/write-vector.js.map +1 -0
- package/package.json +1 -1
package/dist/program.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { realtimeMilliseconds } from "./monotonic-clock.js";
|
|
2
2
|
import { normalizeProcessFilesystemPolicy } from "@volter/browser-runtime/browser-process-filesystem-policy.js";
|
|
3
3
|
import { BrowserByteVault } from "@volter/browser-runtime/browser-byte-vault.js";
|
|
4
|
+
import { setBrowserFileTimes } from "@volter/browser-runtime/browser-file-times.js";
|
|
4
5
|
import { installProgramResources } from "@volter/browser-runtime/browser-program-resources.js";
|
|
5
6
|
import { BrowserWaliWorkerProgram } from "./worker-program.js";
|
|
6
7
|
/** Where the host puts each program's marker; the programs themselves are its parent's other children. */
|
|
@@ -82,6 +83,13 @@ class PrivateFileOverlay {
|
|
|
82
83
|
}
|
|
83
84
|
file.mtimeMs = typeof mtime === "number" ? mtime : Number(mtime);
|
|
84
85
|
}
|
|
86
|
+
utimesMsSync(path, atimeMs, mtimeMs) {
|
|
87
|
+
const file = this.privateFile(path);
|
|
88
|
+
if (file)
|
|
89
|
+
file.mtimeMs = mtimeMs;
|
|
90
|
+
else
|
|
91
|
+
setBrowserFileTimes(this.shared, path, atimeMs, mtimeMs);
|
|
92
|
+
}
|
|
85
93
|
privateFile(path) {
|
|
86
94
|
return this.files.find((file) => file.path === path);
|
|
87
95
|
}
|
package/dist/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;gBAA1B,OAAO,EAAE,SAAS,MAAM,EAAE;CAIhD;AA+CD,qBAAa,kBAAkB;IACvB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CA46B1F"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import { waliRaisesBrokenPipe } from "./socket-flags.js";
|
|
2
|
+
import { waliTerminalAccess, waliTerminalOperation, waliTerminalSettingsIoctl } from "./tty-job-control.js";
|
|
3
|
+
import { setWaliSignalInterruption } from "./signal-interruption.js";
|
|
1
4
|
import { resolveWaliExec } from "./exec-format.js";
|
|
5
|
+
import { createWaliEnvironmentImports } from "./environment.js";
|
|
6
|
+
import { captureWaliForkMemory, restoreWaliForkMemory } from "./fork-memory.js";
|
|
7
|
+
import { gatherWaliWriteVector } from "./write-vector.js";
|
|
2
8
|
import { WaliKernelProcessClient, forkKernelProcessIdentity, kernelTerminalIoctl, parkWaliStopped } from "./kernel-process-client.js";
|
|
3
9
|
import { releaseWaliSharedBuffers } from "./shared-buffer-pool.js";
|
|
4
10
|
import { hostWait, setHostIdle } from "./host-idle.js";
|
|
@@ -28,7 +34,7 @@ import { applyProcessFilesystemPatch, createBrowserProcessSharedState, closeShar
|
|
|
28
34
|
import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
|
|
29
35
|
import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
30
36
|
import { WaliCoherentFileLockClient } from "./coherent-file-locks.js";
|
|
31
|
-
import {
|
|
37
|
+
import { realtimeMilliseconds } from "./monotonic-clock.js";
|
|
32
38
|
const EBADF = 9n;
|
|
33
39
|
const EINVAL = 22n;
|
|
34
40
|
const encoder = new TextEncoder();
|
|
@@ -119,6 +125,11 @@ export class BrowserWaliRuntime {
|
|
|
119
125
|
let filesystemCoordinator;
|
|
120
126
|
let filesystemOnMainThread = false;
|
|
121
127
|
const importedMemory = createImportedMemory(source, options.memory);
|
|
128
|
+
const memoryLayout = options.memoryLayout ?? (!(source instanceof WebAssembly.Module)
|
|
129
|
+
? findImportedMemory(source instanceof Uint8Array ? source : new Uint8Array(source)) : undefined);
|
|
130
|
+
// A reused Memory retains its capacity. This instance's allocator starts
|
|
131
|
+
// at the module's original extent, plus this instance's host reservations.
|
|
132
|
+
let imageExtent = memoryLayout ? memoryLayout.initial * 65_536 : importedMemory?.buffer.byteLength;
|
|
122
133
|
const stdioAliasRegistry = createStdioAliasRegistry();
|
|
123
134
|
// Word 0 is the fatal flag. Word 1 retains the first failing worker slot,
|
|
124
135
|
// so a later futex wake cannot hide the original pthread diagnostic.
|
|
@@ -177,10 +188,14 @@ export class BrowserWaliRuntime {
|
|
|
177
188
|
* things about who decided.
|
|
178
189
|
*/
|
|
179
190
|
const exit = (status, name = "SYS_exit_group") => {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
191
|
+
// Only a process with pthreads has another thread that could have ended it;
|
|
192
|
+
// without one, every exit (each fork's included) printed and relayed this.
|
|
193
|
+
if (threadPool) {
|
|
194
|
+
const notice = `[WALI] ${name}(${status & 0xff}) on the MAIN thread -- the process is ending here,`
|
|
195
|
+
+ ` not in a pthread. If the program did not ask to exit, this is the caller to find.`;
|
|
196
|
+
console.error(notice);
|
|
197
|
+
options.onDiagnostic?.(notice);
|
|
198
|
+
}
|
|
184
199
|
throw new WaliProcessExit(status & 0xff);
|
|
185
200
|
};
|
|
186
201
|
const signalSelf = (signal) => {
|
|
@@ -188,12 +203,12 @@ export class BrowserWaliRuntime {
|
|
|
188
203
|
return -22n;
|
|
189
204
|
if (signal === 0)
|
|
190
205
|
return 0n;
|
|
191
|
-
// blocked
|
|
206
|
+
// A blocked default action is pending too; delivery consults the thread mask.
|
|
192
207
|
if (signal !== 9 && (signalHost.mask & (1n << BigInt(signal - 1))) !== 0n) {
|
|
193
|
-
new WaliSignals(signalState).raise(signal);
|
|
208
|
+
new WaliSignals(signalState).raise(signal, 0, 0, 0, true);
|
|
194
209
|
return 0n;
|
|
195
210
|
}
|
|
196
|
-
const disposition = signal === 9
|
|
211
|
+
const disposition = signal === 9 ? "default" : new WaliSignals(signalState).raise(signal);
|
|
197
212
|
if (disposition === "default" && defaultStops(signal) && kernelProcesses)
|
|
198
213
|
return kernelProcesses.call("kill", pid, signal);
|
|
199
214
|
if (disposition === "default" && defaultTerminates(signal))
|
|
@@ -240,7 +255,7 @@ export class BrowserWaliRuntime {
|
|
|
240
255
|
...(options.filesystemUpdatePort ? { updatePort: options.filesystemUpdatePort } : {}),
|
|
241
256
|
...(options.fileLocks ? { fileLocks: options.fileLocks } : {}),
|
|
242
257
|
...(options.fileCoherence ? { fileCoherence: options.fileCoherence } : {}),
|
|
243
|
-
});
|
|
258
|
+
}, filesystemOnMainThread ? undefined : await options.filesystemService?.());
|
|
244
259
|
}
|
|
245
260
|
if (filesystemPolicy && threaded && !filesystemCoordinator && !inheritedDescriptors)
|
|
246
261
|
throw new Error("Confined WALI threads require the shared filesystem owner.");
|
|
@@ -257,6 +272,11 @@ export class BrowserWaliRuntime {
|
|
|
257
272
|
...(runtimeFilesystem ? { filesystem: runtimeFilesystem } : {}),
|
|
258
273
|
cwd: options.cwd ?? "/",
|
|
259
274
|
stdin,
|
|
275
|
+
...(options.terminalStdin ? { terminalStdin: options.terminalStdin } : {}),
|
|
276
|
+
...(options.onTerminalOutput ? { emitTerminal: (value) => {
|
|
277
|
+
options.onTerminalOutput(value.slice());
|
|
278
|
+
return BigInt(value.byteLength);
|
|
279
|
+
} } : {}),
|
|
260
280
|
executablePath,
|
|
261
281
|
memory,
|
|
262
282
|
emit,
|
|
@@ -275,19 +295,34 @@ export class BrowserWaliRuntime {
|
|
|
275
295
|
...(options.onDiagnostic ? { onDiagnostic: options.onDiagnostic } : {}),
|
|
276
296
|
});
|
|
277
297
|
const fileDescriptorImports = fileDescriptors.imports();
|
|
278
|
-
|
|
298
|
+
// A fork child resumes inside the parent's image, whose environ is already
|
|
299
|
+
// in memory; libc reads the environment file only at startup, so a fork
|
|
300
|
+
// would write and remove one no one reads (four filesystem round trips).
|
|
301
|
+
const directEnvironment = waliDescriptors.some((descriptor) => descriptor.name === "__cl_get_envc");
|
|
302
|
+
const environmentFile = options.forkState || directEnvironment ? undefined : fileDescriptors.writeEnvironmentFile(options.env ?? {}, pid);
|
|
279
303
|
const sharedFileClient = inheritedDescriptors ?? filesystemCoordinator?.filesystem();
|
|
280
304
|
const sharedFileHost = sharedFileClient
|
|
281
305
|
? new WaliSharedFileDescriptorHost(sharedFileClient, stdioAliasRegistry, sharedPipeState, memory) : undefined;
|
|
282
306
|
const memoryManager = new WaliMemoryManager(memory, (fd, offset, length) => sharedFileHost?.readForMapping(fd, offset, length)
|
|
283
307
|
?? fileDescriptors.readForMapping(fd, offset, length), mmapCursor, (fd) => sharedFileHost?.mappingPath(fd) ?? fileDescriptors.mappingPath(fd), (path, offset, value) => sharedFileHost?.writeForMapping(path, offset, value)
|
|
284
|
-
?? fileDescriptors.writeForMapping(path, offset, value), sharedMmapRegistry, options.onDiagnostic);
|
|
285
|
-
const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory)
|
|
308
|
+
?? fileDescriptors.writeForMapping(path, offset, value), sharedMmapRegistry, options.onDiagnostic, () => imageExtent ?? memory().buffer.byteLength);
|
|
309
|
+
const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory), signal => {
|
|
310
|
+
if (defaultStops(signal)) {
|
|
311
|
+
if (!kernelProcesses)
|
|
312
|
+
throw new Error("ENOSYS: default stop needs the kernel process owner.");
|
|
313
|
+
kernelProcesses.call("stop", signal);
|
|
314
|
+
parkWaliStopped(options.processIdentity);
|
|
315
|
+
}
|
|
316
|
+
else if (defaultTerminates(signal))
|
|
317
|
+
exit(128 + signal, `signal ${signal}`);
|
|
318
|
+
}, true);
|
|
286
319
|
signalHost.mask = options.forkState?.signalMask ?? 0n;
|
|
287
320
|
// The same number the thread pool is built with below, so the CPU count
|
|
288
321
|
// the guest is told about can never exceed the workers that exist.
|
|
289
322
|
const threadPoolSize = options.threadPoolSize ?? 18;
|
|
290
|
-
|
|
323
|
+
if (sharedFileClient)
|
|
324
|
+
fileDescriptors.descriptors.descriptorLimits = sharedFileClient.descriptorLimits;
|
|
325
|
+
const systemHost = new WaliSystemHost(memory, pid, stdin, pthreadFatal, options.terminal, threadPoolSize, () => memoryManager.growAhead(), fileDescriptors.descriptors.descriptorLimits);
|
|
291
326
|
const hostDoorbell = filesystemOnMainThread ? filesystemCoordinator?.doorbell() : undefined;
|
|
292
327
|
// ADR-0046: every wait of this thread answers the other threads and the page from here on.
|
|
293
328
|
setHostIdle(hostDoorbell ? { pump: () => filesystemCoordinator.pump(true), doorbell: hostDoorbell } : undefined);
|
|
@@ -302,7 +337,7 @@ export class BrowserWaliRuntime {
|
|
|
302
337
|
// hundredth copy of the notice buries the first.
|
|
303
338
|
let threadPoolExhaustionReported = false;
|
|
304
339
|
if (options.network || childDoor) {
|
|
305
|
-
networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity);
|
|
340
|
+
networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity, options.networkService ? await options.networkService() : undefined, !options.forkState, fileDescriptors.descriptors.descriptorLimits, options.terminalStdin instanceof SharedWaliStdinReader ? options.terminalStdin.buffer : undefined);
|
|
306
341
|
}
|
|
307
342
|
const networkHost = networkCoordinator ? new WaliNetworkHost(memory, networkCoordinator.createChannel(), signalHost, options.processIdentity) : undefined;
|
|
308
343
|
const sharedPipeHost = new WaliSharedPipeHost(memory, sharedPipeState, sharedFileClient ? undefined : localDescriptors, sharedFileClient);
|
|
@@ -525,11 +560,12 @@ export class BrowserWaliRuntime {
|
|
|
525
560
|
const image = resolveWaliExec(runtimeFilesystem, path, readCStringArray(argvPointer), currentCwd());
|
|
526
561
|
if (typeof image === "number")
|
|
527
562
|
return BigInt(image);
|
|
528
|
-
//
|
|
529
|
-
|
|
563
|
+
// Linux treats NULL envp as an empty vector. A null-prototype record
|
|
564
|
+
// also retains names such as __proto__ without object setter rules.
|
|
565
|
+
const env = Object.create(null);
|
|
530
566
|
for (const entry of readCStringArray(envPointer)) {
|
|
531
567
|
const separator = entry.indexOf("=");
|
|
532
|
-
if (separator
|
|
568
|
+
if (separator >= 0)
|
|
533
569
|
env[entry.slice(0, separator)] = entry.slice(separator + 1);
|
|
534
570
|
}
|
|
535
571
|
sharedFileClient.prepareSpawn();
|
|
@@ -537,7 +573,7 @@ export class BrowserWaliRuntime {
|
|
|
537
573
|
const stdin = exportPipe(0, "reader");
|
|
538
574
|
const stdout = exportPipe(1, "writer");
|
|
539
575
|
const stderr = exportPipe(2, "writer");
|
|
540
|
-
const completion = options.forkState ?? createBrowserProcessSharedState();
|
|
576
|
+
const completion = options.execCompletion ?? options.forkState ?? createBrowserProcessSharedState();
|
|
541
577
|
options.browserProcess.spawn({
|
|
542
578
|
// The kernel's exec: the image changes, the process does not. The pid
|
|
543
579
|
// and the parent go across, and the child numbers ITS children from
|
|
@@ -552,13 +588,17 @@ export class BrowserWaliRuntime {
|
|
|
552
588
|
...(filesystemPolicy ? { filesystemPolicy } : {}),
|
|
553
589
|
...(stdin ? { stdin } : {}), ...(stdout ? { stdout } : {}), ...(stderr ? { stderr } : {}),
|
|
554
590
|
});
|
|
555
|
-
|
|
591
|
+
// An inherited image forwards the existing process completion to its
|
|
592
|
+
// successor. It owns no coordinator which needs keeping alive, and
|
|
593
|
+
// must not wait on a private record or publish an intermediate exit.
|
|
594
|
+
if (options.forkState || options.execCompletion)
|
|
556
595
|
throw new WaliProcessReplaced();
|
|
557
596
|
// A root owns the descriptor coordinator the replacement borrows.
|
|
558
597
|
// Keep servicing it until completion; never resume the old guest image.
|
|
559
598
|
const control = new Int32Array(completion.control);
|
|
560
599
|
while (Atomics.load(control, 0) === 0)
|
|
561
600
|
hostWait(control, 0, 0);
|
|
601
|
+
const exitCode = Atomics.load(control, 1);
|
|
562
602
|
const patch = decodeProcessSnapshot(completion);
|
|
563
603
|
releaseWaliSharedBuffers(completion.bufferLease, 2);
|
|
564
604
|
if (patch) {
|
|
@@ -569,9 +609,10 @@ export class BrowserWaliRuntime {
|
|
|
569
609
|
if (snapshot)
|
|
570
610
|
options.browserProcess.restore?.(snapshot);
|
|
571
611
|
}
|
|
572
|
-
throw new WaliProcessExit(
|
|
612
|
+
throw new WaliProcessExit(exitCode);
|
|
573
613
|
};
|
|
574
614
|
const builtins = {
|
|
615
|
+
...createWaliEnvironmentImports(options.env ?? {}, memory),
|
|
575
616
|
__init: () => 0,
|
|
576
617
|
__deinit: () => 0,
|
|
577
618
|
__proc_exit: (status) => exit(Number(status)),
|
|
@@ -588,28 +629,14 @@ export class BrowserWaliRuntime {
|
|
|
588
629
|
? fileDescriptors.copyCString(Number(pointer), environmentFile, Number(size)) : 0,
|
|
589
630
|
SYS_write: (fd, pointer, length) => emit(Number(fd), copyOut(Number(pointer), Number(length))),
|
|
590
631
|
SYS_writev: (fd, iovPointer, iovCount) => {
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
const offset = Number(iovPointer) + index * 8;
|
|
594
|
-
assertMemoryRange(memory(), offset, 8);
|
|
595
|
-
const pointer = view().getUint32(offset, true);
|
|
596
|
-
const length = view().getUint32(offset + 4, true);
|
|
597
|
-
const result = emit(Number(fd), copyOut(pointer, length));
|
|
598
|
-
if (result < 0n)
|
|
599
|
-
return result;
|
|
600
|
-
written += result;
|
|
601
|
-
}
|
|
602
|
-
return written;
|
|
632
|
+
const value = gatherWaliWriteVector(memory(), Number(iovPointer), Number(iovCount));
|
|
633
|
+
return typeof value === "bigint" ? value : emit(Number(fd), value);
|
|
603
634
|
},
|
|
604
635
|
SYS_exit: (status) => exit(Number(status), "SYS_exit"),
|
|
605
636
|
SYS_exit_group: (status) => exit(Number(status), "SYS_exit_group"),
|
|
606
637
|
SYS_getpid: () => BigInt(pid),
|
|
607
638
|
SYS_getppid: () => BigInt(parentProcessId),
|
|
608
639
|
SYS_gettid: () => BigInt(pid),
|
|
609
|
-
SYS_getuid: () => 1000n,
|
|
610
|
-
SYS_geteuid: () => 1000n,
|
|
611
|
-
SYS_getgid: () => 1000n,
|
|
612
|
-
SYS_getegid: () => 1000n,
|
|
613
640
|
SYS_set_tid_address: () => BigInt(pid),
|
|
614
641
|
SYS_sched_yield: () => 0n,
|
|
615
642
|
SYS_sched_setscheduler: () => 0n,
|
|
@@ -687,13 +714,6 @@ export class BrowserWaliRuntime {
|
|
|
687
714
|
}
|
|
688
715
|
return tid;
|
|
689
716
|
},
|
|
690
|
-
SYS_clock_gettime: (clockId, pointer) => {
|
|
691
|
-
const nowNanoseconds = clockNanoseconds(Number(clockId));
|
|
692
|
-
if (nowNanoseconds === undefined)
|
|
693
|
-
return -EINVAL;
|
|
694
|
-
writeTimespec(view(), Number(pointer), nowNanoseconds);
|
|
695
|
-
return 0n;
|
|
696
|
-
},
|
|
697
717
|
SYS_gettimeofday: (pointer) => {
|
|
698
718
|
if (Number(pointer) !== 0) {
|
|
699
719
|
const microseconds = BigInt(Math.floor(realtimeMilliseconds() * 1_000));
|
|
@@ -718,11 +738,26 @@ export class BrowserWaliRuntime {
|
|
|
718
738
|
// epoll, eventfd, and timerfd. Root and pthread instances must share it:
|
|
719
739
|
// Tokio passes waker descriptors across those instance boundaries.
|
|
720
740
|
...(networkHost ? networkHost.imports({ ...pipeImports, ...eventImports }) : eventImports),
|
|
721
|
-
SYS_ioctl: (fd, request, argument) =>
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
741
|
+
SYS_ioctl: (fd, request, argument) => {
|
|
742
|
+
if (fileDescriptors.terminalFd(Number(fd)) && (Number(request) >>> 0) === 0x541b)
|
|
743
|
+
return fileDescriptors.terminalAvailable(Number(argument));
|
|
744
|
+
if (networkHost?.isNetworkFd(Number(fd)))
|
|
745
|
+
return networkHost.ioctl(Number(fd), Number(request) >>> 0, Number(argument));
|
|
746
|
+
const operation = Number(request) >>> 0;
|
|
747
|
+
const stream = fileDescriptors.stdioFd(Number(fd));
|
|
748
|
+
if (stream === undefined || operation === 0x5421 || operation === 0x5451 || operation === 0x5450) {
|
|
749
|
+
return pipeImports.SYS_ioctl(fd, request, argument);
|
|
750
|
+
}
|
|
751
|
+
if (kernelProcesses && options.terminal) {
|
|
752
|
+
const settings = waliTerminalSettingsIoctl(kernelProcesses, memory(), operation, Number(argument));
|
|
753
|
+
if (settings !== undefined)
|
|
754
|
+
return settings;
|
|
755
|
+
}
|
|
756
|
+
if (kernelProcesses && options.terminal && (operation === 0x540f || operation === 0x5410)) {
|
|
757
|
+
return kernelTerminalIoctl(kernelProcesses, memory(), Number(request), Number(argument));
|
|
758
|
+
}
|
|
759
|
+
return systemImports.SYS_ioctl(stream, request, argument);
|
|
760
|
+
},
|
|
726
761
|
// Every other prctl is a no-op, as the capability table advertises. ADR-0047's
|
|
727
762
|
// handshake goes to the table that holds the files: the filesystem's host,
|
|
728
763
|
// or this thread's own. After the spreads, since a threaded program's thin
|
|
@@ -765,20 +800,46 @@ export class BrowserWaliRuntime {
|
|
|
765
800
|
const timed = !sampled || (spent.calls & (SAMPLE_EVERY - 1)) === 0;
|
|
766
801
|
const began = timed ? performance.now() : 0;
|
|
767
802
|
try {
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
803
|
+
for (;;) {
|
|
804
|
+
const result = waliCall(descriptor.name, () => {
|
|
805
|
+
const request = descriptor.name === "SYS_ioctl" ? Number(args[1]) >>> 0 : 0;
|
|
806
|
+
const candidate = waliTerminalOperation(descriptor.name, request);
|
|
807
|
+
const terminal = (candidate !== undefined || descriptor.name === "SYS_ioctl")
|
|
808
|
+
&& options.terminal && kernelProcesses && fileDescriptors.stdioFd(Number(args[0])) !== undefined;
|
|
809
|
+
const operation = terminal ? candidate : undefined;
|
|
810
|
+
if (operation && kernelProcesses) {
|
|
811
|
+
const access = waliTerminalAccess(kernelProcesses, options.processIdentity, signalHost, operation);
|
|
812
|
+
if (access !== 0n)
|
|
813
|
+
return access;
|
|
814
|
+
}
|
|
815
|
+
const value = handler(...args);
|
|
816
|
+
if ((descriptor.name === "SYS_open" || descriptor.name === "SYS_openat")
|
|
817
|
+
&& typeof value === "bigint" && value >= 0n && fileDescriptors.terminalFd(Number(value))) {
|
|
818
|
+
const attached = kernelProcesses?.call("ttyopen") ?? (options.terminal ? 0n : -6n);
|
|
819
|
+
if (attached < 0n) {
|
|
820
|
+
pipeImports.SYS_close(value);
|
|
821
|
+
return attached;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
return value;
|
|
825
|
+
}, args);
|
|
826
|
+
options.onSyscallResult?.(descriptor.name, result);
|
|
827
|
+
if (!jumps.isCapturing()) {
|
|
828
|
+
// Linux pipe.c anon_pipe_write sends SIGPIPE to the writer as
|
|
829
|
+
// well as returning EPIPE. Raise it in the calling guest, after
|
|
830
|
+
// descriptor routing (including remote inherited descriptors),
|
|
831
|
+
// before libc can turn the error into a builtin diagnostic.
|
|
832
|
+
// Socket send calls suppress the signal only with MSG_NOSIGNAL.
|
|
833
|
+
if (result === -32n && waliRaisesBrokenPipe(descriptor.name, args))
|
|
834
|
+
signalSelf(13);
|
|
835
|
+
const restart = signalHost.deliver(result === -4n);
|
|
836
|
+
if (result === -4n && restart && (RESTARTABLE_STREAM_CALLS.has(descriptor.name)
|
|
837
|
+
|| waliTerminalOperation(descriptor.name, Number(args[1]) >>> 0) === "change"))
|
|
838
|
+
continue;
|
|
839
|
+
}
|
|
840
|
+
parkWaliStopped(options.processIdentity);
|
|
841
|
+
return result;
|
|
779
842
|
}
|
|
780
|
-
parkWaliStopped(options.processIdentity);
|
|
781
|
-
return result;
|
|
782
843
|
}
|
|
783
844
|
finally {
|
|
784
845
|
spent.calls += 1;
|
|
@@ -798,13 +859,7 @@ export class BrowserWaliRuntime {
|
|
|
798
859
|
env,
|
|
799
860
|
});
|
|
800
861
|
if (options.forkState) {
|
|
801
|
-
|
|
802
|
-
bytes().set(new Uint8Array(snapshot));
|
|
803
|
-
// This transferred image has one consumer. A live child needs its
|
|
804
|
-
// restored memory, not a second full image retained by forkState.
|
|
805
|
-
// The browser baseline supplies ES2024 transfer; this package's
|
|
806
|
-
// declaration lib remains ES2023 for its other APIs.
|
|
807
|
-
snapshot.transfer(0);
|
|
862
|
+
restoreWaliForkMemory(memory(), options.forkState);
|
|
808
863
|
for (const [name, value] of Object.entries(options.forkState.globals)) {
|
|
809
864
|
const global = instance.exports[name];
|
|
810
865
|
if (!(global instanceof WebAssembly.Global))
|
|
@@ -812,7 +867,9 @@ export class BrowserWaliRuntime {
|
|
|
812
867
|
global.value = value;
|
|
813
868
|
}
|
|
814
869
|
memoryManager.restoreFork(options.forkState.mappings);
|
|
815
|
-
|
|
870
|
+
// The owner's copy of this table already holds the umask; only the local
|
|
871
|
+
// table needs it, so setting it is no round trip.
|
|
872
|
+
localFileImports.SYS_umask(options.forkState.umask);
|
|
816
873
|
}
|
|
817
874
|
else if (typeof instance.exports.asyncify_start_unwind === "function") {
|
|
818
875
|
const stack = instance.exports.__stack_pointer;
|
|
@@ -823,8 +880,11 @@ export class BrowserWaliRuntime {
|
|
|
823
880
|
const capacity = Number(stack.value);
|
|
824
881
|
if (capacity <= 0)
|
|
825
882
|
throw new Error("Asyncify fork requires a nonempty module stack.");
|
|
826
|
-
asyncifyData = memory().buffer.byteLength;
|
|
827
|
-
|
|
883
|
+
asyncifyData = imageExtent ?? memory().buffer.byteLength;
|
|
884
|
+
imageExtent = asyncifyData + Math.ceil((capacity + 8) / 65_536) * 65_536;
|
|
885
|
+
const missing = imageExtent - memory().buffer.byteLength;
|
|
886
|
+
if (missing > 0)
|
|
887
|
+
memory().grow(Math.ceil(missing / 65_536));
|
|
828
888
|
view().setUint32(asyncifyData + 4, asyncifyData + 8 + capacity, true);
|
|
829
889
|
}
|
|
830
890
|
if (options.codec?.version === 1) {
|
|
@@ -845,8 +905,7 @@ export class BrowserWaliRuntime {
|
|
|
845
905
|
if (!importedMemory) {
|
|
846
906
|
throw new Error("A threaded WALI module must be linked with --import-memory so browser workers can share its process memory.");
|
|
847
907
|
}
|
|
848
|
-
const poolLayout =
|
|
849
|
-
? findImportedMemory(source instanceof Uint8Array ? source : new Uint8Array(source)) : undefined);
|
|
908
|
+
const poolLayout = memoryLayout;
|
|
850
909
|
threadPool = new WaliThreadPool({
|
|
851
910
|
...(options.waitAgent ? { waitAgent: options.waitAgent } : {}),
|
|
852
911
|
...(options.onWaitState ? { onWaitState: options.onWaitState } : {}),
|
|
@@ -862,6 +921,7 @@ export class BrowserWaliRuntime {
|
|
|
862
921
|
...(options.processIdentity ? { processIdentity: options.processIdentity } : {}),
|
|
863
922
|
executablePath,
|
|
864
923
|
argv,
|
|
924
|
+
env: options.env ?? {},
|
|
865
925
|
cwd: fileDescriptors.currentWorkingDirectory(),
|
|
866
926
|
stdioAliasRegistry: stdioAliasRegistry.buffer,
|
|
867
927
|
sharedPipes: sharedPipeState,
|
|
@@ -872,7 +932,9 @@ export class BrowserWaliRuntime {
|
|
|
872
932
|
...(options.browserProcess?.filesystemPolicyVersion === 1 ? { childFilesystemPolicyVersion: 1 } : {}),
|
|
873
933
|
...(options.threadOutputPorts ? { outputPorts: options.threadOutputPorts } : {}),
|
|
874
934
|
...(stdin instanceof SharedWaliStdinReader ? { stdin: stdin.buffer } : {}),
|
|
935
|
+
...(options.terminalStdin instanceof SharedWaliStdinReader ? { terminalStdin: options.terminalStdin.buffer } : {}),
|
|
875
936
|
terminal: options.terminal === true,
|
|
937
|
+
...(options.onTerminalOutput ? { onTerminalOutput: options.onTerminalOutput } : {}),
|
|
876
938
|
onStdout: (chunk) => { emit(1, chunk); },
|
|
877
939
|
onStderr: (chunk) => { emit(2, chunk); },
|
|
878
940
|
...(networkCoordinator ? { network: networkCoordinator } : {}),
|
|
@@ -891,6 +953,11 @@ export class BrowserWaliRuntime {
|
|
|
891
953
|
let exitCode = 0;
|
|
892
954
|
let replaced = false;
|
|
893
955
|
const rootStackPointer = Number(instance.exports.__stack_pointer?.value ?? 0);
|
|
956
|
+
setWaliSignalInterruption(() => {
|
|
957
|
+
const words = signalHost.signals.words, generation = Atomics.load(words, 1);
|
|
958
|
+
return { pending: (signalHost.signals.pending() & ~signalHost.mask) !== 0n,
|
|
959
|
+
guards: [{ words, index: 1, value: generation }] };
|
|
960
|
+
});
|
|
894
961
|
try {
|
|
895
962
|
try {
|
|
896
963
|
if (rewinding)
|
|
@@ -910,8 +977,7 @@ export class BrowserWaliRuntime {
|
|
|
910
977
|
break;
|
|
911
978
|
asyncify("asyncify_stop_unwind");
|
|
912
979
|
unwinding = false;
|
|
913
|
-
const layout =
|
|
914
|
-
? findImportedMemory(source instanceof Uint8Array ? source : new Uint8Array(source)) : undefined);
|
|
980
|
+
const layout = memoryLayout;
|
|
915
981
|
if (!layout)
|
|
916
982
|
throw new Error("Fork requires the module's imported memory layout.");
|
|
917
983
|
const globals = {};
|
|
@@ -932,19 +998,26 @@ export class BrowserWaliRuntime {
|
|
|
932
998
|
childWaitControls.set(forkResult, new Int32Array(control));
|
|
933
999
|
if (registered < 0)
|
|
934
1000
|
throw new Error(`Fork child registration failed: ${registered}`);
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
1001
|
+
// Rewind reads the Asyncify data only up to its current position. With
|
|
1002
|
+
// the stack lowest in memory (layout.stackTop), below the stack pointer
|
|
1003
|
+
// is unused stack; one page under it is kept as margin.
|
|
1004
|
+
const stackPointer = Number(globals.__stack_pointer ?? 0);
|
|
1005
|
+
const unused = [{ start: view().getUint32(asyncifyData, true), end: view().getUint32(asyncifyData + 4, true) },
|
|
1006
|
+
...(layout.stackTop !== undefined && stackPointer > 0 && stackPointer <= layout.stackTop
|
|
1007
|
+
? [{ start: 0, end: stackPointer - 65_536 }] : [])];
|
|
1008
|
+
const snapshot = captureWaliForkMemory(memory(), threaded, unused);
|
|
1009
|
+
options.onDiagnostic?.(`[WALI] fork snapshot: ${memory().buffer.byteLength} bytes, payload ${snapshot.memory.byteLength} bytes, Asyncify stack ${view().getUint32(asyncifyData, true) - asyncifyData - 8} bytes.`);
|
|
1010
|
+
const forked = sharedFileClient.copyForForkChannel();
|
|
938
1011
|
options.browserProcess.fork({
|
|
939
1012
|
module, memoryLayout: layout, pid: forkResult, ...completion,
|
|
940
|
-
descriptorTable:
|
|
1013
|
+
descriptorTable: forked.channel,
|
|
941
1014
|
childPidAllocator: nextChildPid.buffer,
|
|
942
|
-
argv, env: { ...options.env }, cwd:
|
|
1015
|
+
argv, env: { ...options.env }, cwd: forked.cwd, executablePath,
|
|
943
1016
|
...(filesystemPolicy ? { filesystemPolicy } : {}),
|
|
944
|
-
forkState: { ...completion,
|
|
1017
|
+
forkState: { ...completion, ...snapshot, globals,
|
|
945
1018
|
allocator: memoryManager.allocatorControl().slice(0), mappings: memoryManager.forkSnapshot(),
|
|
946
1019
|
signalState: forkSignals.state, signalMask: forkSignals.mask,
|
|
947
|
-
asyncifyData, jumps: jumps.forkSnapshot(), umask:
|
|
1020
|
+
asyncifyData, jumps: jumps.forkSnapshot(), umask: forked.umask, parentPid: pid },
|
|
948
1021
|
});
|
|
949
1022
|
rewinding = true;
|
|
950
1023
|
asyncify("asyncify_start_rewind", asyncifyData);
|
|
@@ -968,6 +1041,7 @@ export class BrowserWaliRuntime {
|
|
|
968
1041
|
}
|
|
969
1042
|
finally {
|
|
970
1043
|
// First, so a teardown step that throws cannot leave a process's pipe buffers held (review of 945655a).
|
|
1044
|
+
setWaliSignalInterruption(undefined);
|
|
971
1045
|
forgetWaliSharedPipeState();
|
|
972
1046
|
setWaliWaitPublisher(undefined);
|
|
973
1047
|
threadPool?.terminate();
|
|
@@ -982,6 +1056,10 @@ export class BrowserWaliRuntime {
|
|
|
982
1056
|
}
|
|
983
1057
|
else
|
|
984
1058
|
syncFilesystem();
|
|
1059
|
+
// Inherited images have no private filesystem to publish at exit.
|
|
1060
|
+
// Flush the one owner's writes before closing this image's table.
|
|
1061
|
+
if (inheritedDescriptors)
|
|
1062
|
+
inheritedDescriptors.prepareSpawn();
|
|
985
1063
|
sharedFileClient?.closeProcess();
|
|
986
1064
|
if (!sharedFileClient)
|
|
987
1065
|
fileDescriptors.descriptors.exit();
|
|
@@ -1012,6 +1090,9 @@ export class BrowserWaliRuntime {
|
|
|
1012
1090
|
};
|
|
1013
1091
|
}
|
|
1014
1092
|
}
|
|
1093
|
+
// Linux restarts interrupted blocking stream I/O when the handler has SA_RESTART.
|
|
1094
|
+
// Timeout-bearing poll/sleep/sigtimedwait calls are deliberately not retried here.
|
|
1095
|
+
const RESTARTABLE_STREAM_CALLS = new Set(["SYS_read", "SYS_write", "SYS_readv", "SYS_writev", "SYS_recv", "SYS_recvfrom", "SYS_recvmsg"]);
|
|
1015
1096
|
/** The calls through which a process makes a child: fork, exec, the browser's spawn door, and the wait for one. */
|
|
1016
1097
|
const CHILD_PROCESS_SYSCALLS = new Set(["SYS_fork", "SYS_execve", "SYS_browser_spawn", "SYS_browser_spawn_confined_v1", "SYS_wait4"]);
|
|
1017
1098
|
/** A run longer than this prints where its time went (`[wali-profile]`). */
|
|
@@ -1061,23 +1142,6 @@ function concatenate(chunks) {
|
|
|
1061
1142
|
}
|
|
1062
1143
|
return result;
|
|
1063
1144
|
}
|
|
1064
|
-
function clockNanoseconds(clockId) {
|
|
1065
|
-
if (clockId === 0) {
|
|
1066
|
-
const milliseconds = typeof performance === "undefined"
|
|
1067
|
-
? Date.now() : performance.timeOrigin + performance.now();
|
|
1068
|
-
return BigInt(Math.floor(milliseconds * 1_000_000));
|
|
1069
|
-
}
|
|
1070
|
-
if (clockId === 1 || clockId === 4) {
|
|
1071
|
-
return BigInt(Math.floor(monotonicMilliseconds() * 1_000_000));
|
|
1072
|
-
}
|
|
1073
|
-
return undefined;
|
|
1074
|
-
}
|
|
1075
|
-
function writeTimespec(view, pointer, nanoseconds) {
|
|
1076
|
-
if (pointer < 0 || pointer + 16 > view.byteLength)
|
|
1077
|
-
throw new WebAssembly.RuntimeError("WALI timespec pointer is out of bounds.");
|
|
1078
|
-
view.setBigInt64(pointer, nanoseconds / 1000000000n, true);
|
|
1079
|
-
view.setBigInt64(pointer + 8, nanoseconds % 1000000000n, true);
|
|
1080
|
-
}
|
|
1081
1145
|
function fillRandom(destination) {
|
|
1082
1146
|
if (!globalThis.crypto?.getRandomValues)
|
|
1083
1147
|
throw new Error("Web Crypto is required for SYS_getrandom.");
|