@ai-ecoverse/slicc-kernel 1.4.0 → 1.6.0
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/README.md +21 -6
- package/dist/index.js +160 -12
- package/dist/index.js.map +4 -4
- package/dist/kernel-worker.js +144 -33
- package/dist/kernel-worker.js.map +3 -3
- package/dist/process-worker.js +62 -4
- package/dist/process-worker.js.map +3 -3
- package/package.json +4 -4
package/dist/process-worker.js
CHANGED
|
@@ -14,7 +14,7 @@ var __export = (target, all) => {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
// src/kernel/protocol.ts
|
|
17
|
-
var WASM_PROCESS_INIT, WASM_PROCESS_EXIT, WASM_PROCESS_ERROR, WASM_THREAD_SPAWN, WASM_THREAD_INIT, WASM_THREAD_EXIT, WASM_MAX_THREADS;
|
|
17
|
+
var WASM_PROCESS_INIT, WASM_PROCESS_EXIT, WASM_PROCESS_ERROR, WASM_THREAD_SPAWN, WASM_THREAD_INIT, WASM_THREAD_EXIT, WASM_MAX_THREADS, WASM_DEFAULT_THREADS;
|
|
18
18
|
var init_protocol = __esm({
|
|
19
19
|
"src/kernel/protocol.ts"() {
|
|
20
20
|
"use strict";
|
|
@@ -24,7 +24,8 @@ var init_protocol = __esm({
|
|
|
24
24
|
WASM_THREAD_SPAWN = "wasm-thread-spawn";
|
|
25
25
|
WASM_THREAD_INIT = "wasm-thread-init";
|
|
26
26
|
WASM_THREAD_EXIT = "wasm-thread-exit";
|
|
27
|
-
WASM_MAX_THREADS =
|
|
27
|
+
WASM_MAX_THREADS = 256;
|
|
28
|
+
WASM_DEFAULT_THREADS = 64;
|
|
28
29
|
}
|
|
29
30
|
});
|
|
30
31
|
|
|
@@ -4255,6 +4256,7 @@ function importsContext({
|
|
|
4255
4256
|
fs,
|
|
4256
4257
|
fds,
|
|
4257
4258
|
syscall: call2,
|
|
4259
|
+
...processes(host, call2),
|
|
4258
4260
|
async: {
|
|
4259
4261
|
submit: (req) => call2({ op: "async-submit", req }),
|
|
4260
4262
|
wait(timeoutMs) {
|
|
@@ -4284,13 +4286,69 @@ function importsContext({
|
|
|
4284
4286
|
errno: (err) => wasiErrnoOf(code(err))
|
|
4285
4287
|
};
|
|
4286
4288
|
}
|
|
4287
|
-
|
|
4289
|
+
function processes(host, call2) {
|
|
4290
|
+
const close = (fd) => void call2({ op: "fd-close", fd });
|
|
4291
|
+
const slot = (n, how, mine, theirs) => {
|
|
4292
|
+
if (how === "inherit") return { fd: n };
|
|
4293
|
+
if (how === "null") return { none: true };
|
|
4294
|
+
const [read, write] = call2({ op: "fd-pipe" });
|
|
4295
|
+
mine[n] = n === 0 ? write : read;
|
|
4296
|
+
theirs.push(n === 0 ? read : write);
|
|
4297
|
+
return { fd: n === 0 ? read : write };
|
|
4298
|
+
};
|
|
4299
|
+
return {
|
|
4300
|
+
spawn(o) {
|
|
4301
|
+
const mine = [];
|
|
4302
|
+
const theirs = [];
|
|
4303
|
+
host.fds.promoteFiles();
|
|
4304
|
+
try {
|
|
4305
|
+
const stdio = STDIO.map((name, n) => slot(n, o[name] ?? "inherit", mine, theirs));
|
|
4306
|
+
const pid = call2({
|
|
4307
|
+
op: "proc-spawn",
|
|
4308
|
+
file: o.argv[0],
|
|
4309
|
+
argv: o.argv,
|
|
4310
|
+
env: o.env ?? { ...host.o.env },
|
|
4311
|
+
cwd: o.cwd ?? host.cwd,
|
|
4312
|
+
stdio
|
|
4313
|
+
});
|
|
4314
|
+
const out = { pid };
|
|
4315
|
+
STDIO.forEach((name, n) => {
|
|
4316
|
+
if (mine[n] !== void 0) out[name] = mine[n];
|
|
4317
|
+
});
|
|
4318
|
+
return out;
|
|
4319
|
+
} catch (err) {
|
|
4320
|
+
for (const fd of mine) if (fd !== void 0) close(fd);
|
|
4321
|
+
throw err;
|
|
4322
|
+
} finally {
|
|
4323
|
+
for (const fd of theirs) close(fd);
|
|
4324
|
+
host.o.fs.invalidate?.();
|
|
4325
|
+
}
|
|
4326
|
+
},
|
|
4327
|
+
wait(pid) {
|
|
4328
|
+
for (; ; ) {
|
|
4329
|
+
try {
|
|
4330
|
+
const [, status2] = call2({ op: "proc-wait", pid, nohang: false });
|
|
4331
|
+
host.o.fs.invalidate?.();
|
|
4332
|
+
const signal = status2 & 127;
|
|
4333
|
+
return signal ? { status: 128 + signal, signal } : { status: status2 >> 8 & 255 };
|
|
4334
|
+
} catch (err) {
|
|
4335
|
+
if (code(err) !== "EINTR") throw err;
|
|
4336
|
+
}
|
|
4337
|
+
}
|
|
4338
|
+
},
|
|
4339
|
+
kill(pid, sig) {
|
|
4340
|
+
call2({ op: "proc-kill", pid, sig });
|
|
4341
|
+
}
|
|
4342
|
+
};
|
|
4343
|
+
}
|
|
4344
|
+
var UID, STDIO;
|
|
4288
4345
|
var init_wasi_imports = __esm({
|
|
4289
4346
|
"src/process/wasi/wasi-imports.ts"() {
|
|
4290
4347
|
"use strict";
|
|
4291
4348
|
init_wasi_abi();
|
|
4292
4349
|
init_wasi_files();
|
|
4293
4350
|
UID = 1e3;
|
|
4351
|
+
STDIO = ["stdin", "stdout", "stderr"];
|
|
4294
4352
|
}
|
|
4295
4353
|
});
|
|
4296
4354
|
|
|
@@ -4409,7 +4467,7 @@ var init_wasi_stats = __esm({
|
|
|
4409
4467
|
// src/process/wasi/wasi-threads.ts
|
|
4410
4468
|
function threadCap(env) {
|
|
4411
4469
|
const asked = Number.parseInt(env.SLICC_WASM_THREADS ?? "", 10);
|
|
4412
|
-
return asked >= 1 ? Math.min(asked, WASM_MAX_THREADS) :
|
|
4470
|
+
return asked >= 1 ? Math.min(asked, WASM_MAX_THREADS) : WASM_DEFAULT_THREADS;
|
|
4413
4471
|
}
|
|
4414
4472
|
var LAST_TID, RUNNING, MAIN_TID, ThreadExit, WasiThreads;
|
|
4415
4473
|
var init_wasi_threads = __esm({
|