@ai-ecoverse/slicc-kernel 1.66.1 → 1.67.1
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 +2 -2
- package/dist/driver-worker.js.map +2 -2
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +282 -38
- package/dist/kernel-worker.js.map +4 -4
- package/dist/node-driver-worker.js.map +2 -2
- package/dist/node-process-worker.js +67 -20
- package/dist/node-process-worker.js.map +4 -4
- package/dist/node.js +282 -38
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +149 -102
- package/dist/process-worker.js.map +4 -4
- package/package.json +1 -1
package/dist/process-worker.js
CHANGED
|
@@ -101,6 +101,127 @@ var init_lockdown = __esm({
|
|
|
101
101
|
}
|
|
102
102
|
});
|
|
103
103
|
|
|
104
|
+
// src/realm/sync-sab-wire.ts
|
|
105
|
+
function loadU53(header, lo, hi) {
|
|
106
|
+
return (Atomics.load(header, lo) >>> 0) + Atomics.load(header, hi) * U32;
|
|
107
|
+
}
|
|
108
|
+
function publishMemory(sab, bytes) {
|
|
109
|
+
if (bytes > 0)
|
|
110
|
+
Atomics.store(new Int32Array(sab, 0, SAB_HEADER_I32), SAB_I_MEMORY, Math.ceil(bytes / 65536));
|
|
111
|
+
}
|
|
112
|
+
function decodeSabResult(status2, payload) {
|
|
113
|
+
switch (status2) {
|
|
114
|
+
case SAB_STATUS_BYTES:
|
|
115
|
+
return { ok: true, kind: "bytes", bytes: payload };
|
|
116
|
+
case SAB_STATUS_VOID:
|
|
117
|
+
return { ok: true, kind: "void" };
|
|
118
|
+
case SAB_STATUS_JSON: {
|
|
119
|
+
try {
|
|
120
|
+
return { ok: true, kind: "json", json: JSON.parse(decoder.decode(payload)) };
|
|
121
|
+
} catch {
|
|
122
|
+
return { ok: false, errno: "EIO", message: "sync-sab: malformed json payload" };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
case SAB_STATUS_ERRNO: {
|
|
126
|
+
try {
|
|
127
|
+
const parsed = JSON.parse(decoder.decode(payload));
|
|
128
|
+
const errno2 = typeof parsed.errno === "string" && /^E[A-Z]+$|^EAI_[A-Z]+$/.test(parsed.errno) ? parsed.errno : "EIO";
|
|
129
|
+
return { ok: false, errno: errno2, message: String(parsed.message ?? errno2) };
|
|
130
|
+
} catch {
|
|
131
|
+
return { ok: false, errno: "EIO", message: "sync-sab: malformed errno payload" };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
default:
|
|
135
|
+
return { ok: false, errno: "EIO", message: `sync-sab: unknown status ${status2}` };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function sabViews(sab) {
|
|
139
|
+
if (sab.byteLength < SAB_MIN_BYTES) {
|
|
140
|
+
throw new Error(`sync-sab: buffer too small (${sab.byteLength} < ${SAB_MIN_BYTES})`);
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
header: new Int32Array(sab, 0, SAB_HEADER_I32),
|
|
144
|
+
window: new Uint8Array(sab, SAB_HEADER_BYTES)
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
var SAB_HEADER_I32, SAB_CLOCK_OFFSET, SAB_CLOCK_I64, SAB_HEADER_BYTES, SAB_I_STATE, SAB_I_SEQ, SAB_I_STATUS, SAB_I_TOTAL, SAB_I_CHUNK, SAB_I_OFFSET, SAB_I_REQ, SAB_I_PUB, SAB_I_SIGNALS, SAB_I_TIMERS, SAB_I_MEMORY, SAB_I_TOTAL_HI, SAB_I_OFFSET_HI, SAB_I_KILLED, SAB_I_ASYNC, SAB_I_STOP, U32, SAB_STATE_IDLE, SAB_STATE_PENDING, SAB_STATE_READY, SAB_STATUS_BYTES, SAB_STATUS_JSON, SAB_STATUS_VOID, SAB_STATUS_ERRNO, SAB_DEFAULT_WINDOW_BYTES, SAB_MIN_BYTES, SYNC_SAB_REQ_MSG, SYNC_SAB_NEXT_MSG, encoder, decoder;
|
|
148
|
+
var init_sync_sab_wire = __esm({
|
|
149
|
+
"src/realm/sync-sab-wire.ts"() {
|
|
150
|
+
"use strict";
|
|
151
|
+
SAB_HEADER_I32 = 16;
|
|
152
|
+
SAB_CLOCK_OFFSET = SAB_HEADER_I32 * 4;
|
|
153
|
+
SAB_CLOCK_I64 = 3;
|
|
154
|
+
SAB_HEADER_BYTES = SAB_CLOCK_OFFSET + SAB_CLOCK_I64 * 8;
|
|
155
|
+
SAB_I_STATE = 0;
|
|
156
|
+
SAB_I_SEQ = 1;
|
|
157
|
+
SAB_I_STATUS = 2;
|
|
158
|
+
SAB_I_TOTAL = 3;
|
|
159
|
+
SAB_I_CHUNK = 4;
|
|
160
|
+
SAB_I_OFFSET = 5;
|
|
161
|
+
SAB_I_REQ = 6;
|
|
162
|
+
SAB_I_PUB = 7;
|
|
163
|
+
SAB_I_SIGNALS = 8;
|
|
164
|
+
SAB_I_TIMERS = 9;
|
|
165
|
+
SAB_I_MEMORY = 10;
|
|
166
|
+
SAB_I_TOTAL_HI = 11;
|
|
167
|
+
SAB_I_OFFSET_HI = 12;
|
|
168
|
+
SAB_I_KILLED = 13;
|
|
169
|
+
SAB_I_ASYNC = 14;
|
|
170
|
+
SAB_I_STOP = 15;
|
|
171
|
+
U32 = 2 ** 32;
|
|
172
|
+
SAB_STATE_IDLE = 0;
|
|
173
|
+
SAB_STATE_PENDING = 1;
|
|
174
|
+
SAB_STATE_READY = 2;
|
|
175
|
+
SAB_STATUS_BYTES = 1;
|
|
176
|
+
SAB_STATUS_JSON = 2;
|
|
177
|
+
SAB_STATUS_VOID = 3;
|
|
178
|
+
SAB_STATUS_ERRNO = 4;
|
|
179
|
+
SAB_DEFAULT_WINDOW_BYTES = 1024 * 1024;
|
|
180
|
+
SAB_MIN_BYTES = SAB_HEADER_BYTES + 4096;
|
|
181
|
+
SYNC_SAB_REQ_MSG = "sync-sab-req";
|
|
182
|
+
SYNC_SAB_NEXT_MSG = "sync-sab-next";
|
|
183
|
+
encoder = new TextEncoder();
|
|
184
|
+
decoder = new TextDecoder();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// src/kernel/cpu-clock.ts
|
|
189
|
+
function epochMicros() {
|
|
190
|
+
return Math.floor((performance.timeOrigin + performance.now()) * 1e3);
|
|
191
|
+
}
|
|
192
|
+
function slots(sab) {
|
|
193
|
+
return new BigInt64Array(sab, LOCAL, SAB_CLOCK_I64);
|
|
194
|
+
}
|
|
195
|
+
function useLocalClock(sab) {
|
|
196
|
+
local = sab && sab.byteLength >= LOCAL + SAB_CLOCK_I64 * 8 ? slots(sab) : void 0;
|
|
197
|
+
if (!local) return;
|
|
198
|
+
const wait2 = (typed, index3, value2, timeout) => localWait(() => rawWait(typed, index3, value2, timeout));
|
|
199
|
+
Atomics.wait = wait2;
|
|
200
|
+
}
|
|
201
|
+
function localWait(wait2) {
|
|
202
|
+
const clock = local;
|
|
203
|
+
if (!clock) return wait2();
|
|
204
|
+
const start2 = BigInt(epochMicros());
|
|
205
|
+
const idle = Atomics.load(clock, IDLE);
|
|
206
|
+
Atomics.store(clock, IDLE, idle - start2);
|
|
207
|
+
try {
|
|
208
|
+
return wait2();
|
|
209
|
+
} finally {
|
|
210
|
+
const end = BigInt(epochMicros());
|
|
211
|
+
Atomics.store(clock, IDLE, idle + (end > start2 ? end - start2 : 0n));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
var LOCAL, IDLE, local, rawWait;
|
|
215
|
+
var init_cpu_clock = __esm({
|
|
216
|
+
"src/kernel/cpu-clock.ts"() {
|
|
217
|
+
"use strict";
|
|
218
|
+
init_sync_sab_wire();
|
|
219
|
+
LOCAL = SAB_CLOCK_OFFSET;
|
|
220
|
+
IDLE = 1;
|
|
221
|
+
rawWait = Atomics.wait.bind(Atomics);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
|
|
104
225
|
// src/kernel/protocol.ts
|
|
105
226
|
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;
|
|
106
227
|
var init_protocol = __esm({
|
|
@@ -1625,93 +1746,11 @@ var init_emscripten_vfs_hook = __esm({
|
|
|
1625
1746
|
}
|
|
1626
1747
|
});
|
|
1627
1748
|
|
|
1628
|
-
// src/realm/sync-sab-wire.ts
|
|
1629
|
-
function loadU53(header, lo, hi) {
|
|
1630
|
-
return (Atomics.load(header, lo) >>> 0) + Atomics.load(header, hi) * U32;
|
|
1631
|
-
}
|
|
1632
|
-
function publishMemory(sab, bytes) {
|
|
1633
|
-
if (bytes > 0)
|
|
1634
|
-
Atomics.store(new Int32Array(sab, 0, SAB_HEADER_I32), SAB_I_MEMORY, Math.ceil(bytes / 65536));
|
|
1635
|
-
}
|
|
1636
|
-
function decodeSabResult(status2, payload) {
|
|
1637
|
-
switch (status2) {
|
|
1638
|
-
case SAB_STATUS_BYTES:
|
|
1639
|
-
return { ok: true, kind: "bytes", bytes: payload };
|
|
1640
|
-
case SAB_STATUS_VOID:
|
|
1641
|
-
return { ok: true, kind: "void" };
|
|
1642
|
-
case SAB_STATUS_JSON: {
|
|
1643
|
-
try {
|
|
1644
|
-
return { ok: true, kind: "json", json: JSON.parse(decoder.decode(payload)) };
|
|
1645
|
-
} catch {
|
|
1646
|
-
return { ok: false, errno: "EIO", message: "sync-sab: malformed json payload" };
|
|
1647
|
-
}
|
|
1648
|
-
}
|
|
1649
|
-
case SAB_STATUS_ERRNO: {
|
|
1650
|
-
try {
|
|
1651
|
-
const parsed = JSON.parse(decoder.decode(payload));
|
|
1652
|
-
const errno2 = typeof parsed.errno === "string" && /^E[A-Z]+$|^EAI_[A-Z]+$/.test(parsed.errno) ? parsed.errno : "EIO";
|
|
1653
|
-
return { ok: false, errno: errno2, message: String(parsed.message ?? errno2) };
|
|
1654
|
-
} catch {
|
|
1655
|
-
return { ok: false, errno: "EIO", message: "sync-sab: malformed errno payload" };
|
|
1656
|
-
}
|
|
1657
|
-
}
|
|
1658
|
-
default:
|
|
1659
|
-
return { ok: false, errno: "EIO", message: `sync-sab: unknown status ${status2}` };
|
|
1660
|
-
}
|
|
1661
|
-
}
|
|
1662
|
-
function sabViews(sab) {
|
|
1663
|
-
if (sab.byteLength < SAB_MIN_BYTES) {
|
|
1664
|
-
throw new Error(`sync-sab: buffer too small (${sab.byteLength} < ${SAB_MIN_BYTES})`);
|
|
1665
|
-
}
|
|
1666
|
-
return {
|
|
1667
|
-
header: new Int32Array(sab, 0, SAB_HEADER_I32),
|
|
1668
|
-
window: new Uint8Array(sab, SAB_HEADER_BYTES)
|
|
1669
|
-
};
|
|
1670
|
-
}
|
|
1671
|
-
var SAB_HEADER_I32, SAB_HEADER_BYTES, SAB_I_STATE, SAB_I_SEQ, SAB_I_STATUS, SAB_I_TOTAL, SAB_I_CHUNK, SAB_I_OFFSET, SAB_I_REQ, SAB_I_PUB, SAB_I_SIGNALS, SAB_I_TIMERS, SAB_I_MEMORY, SAB_I_TOTAL_HI, SAB_I_OFFSET_HI, SAB_I_KILLED, SAB_I_ASYNC, SAB_I_STOP, U32, SAB_STATE_IDLE, SAB_STATE_PENDING, SAB_STATE_READY, SAB_STATUS_BYTES, SAB_STATUS_JSON, SAB_STATUS_VOID, SAB_STATUS_ERRNO, SAB_DEFAULT_WINDOW_BYTES, SAB_MIN_BYTES, SYNC_SAB_REQ_MSG, SYNC_SAB_NEXT_MSG, encoder, decoder;
|
|
1672
|
-
var init_sync_sab_wire = __esm({
|
|
1673
|
-
"src/realm/sync-sab-wire.ts"() {
|
|
1674
|
-
"use strict";
|
|
1675
|
-
SAB_HEADER_I32 = 16;
|
|
1676
|
-
SAB_HEADER_BYTES = SAB_HEADER_I32 * 4;
|
|
1677
|
-
SAB_I_STATE = 0;
|
|
1678
|
-
SAB_I_SEQ = 1;
|
|
1679
|
-
SAB_I_STATUS = 2;
|
|
1680
|
-
SAB_I_TOTAL = 3;
|
|
1681
|
-
SAB_I_CHUNK = 4;
|
|
1682
|
-
SAB_I_OFFSET = 5;
|
|
1683
|
-
SAB_I_REQ = 6;
|
|
1684
|
-
SAB_I_PUB = 7;
|
|
1685
|
-
SAB_I_SIGNALS = 8;
|
|
1686
|
-
SAB_I_TIMERS = 9;
|
|
1687
|
-
SAB_I_MEMORY = 10;
|
|
1688
|
-
SAB_I_TOTAL_HI = 11;
|
|
1689
|
-
SAB_I_OFFSET_HI = 12;
|
|
1690
|
-
SAB_I_KILLED = 13;
|
|
1691
|
-
SAB_I_ASYNC = 14;
|
|
1692
|
-
SAB_I_STOP = 15;
|
|
1693
|
-
U32 = 2 ** 32;
|
|
1694
|
-
SAB_STATE_IDLE = 0;
|
|
1695
|
-
SAB_STATE_PENDING = 1;
|
|
1696
|
-
SAB_STATE_READY = 2;
|
|
1697
|
-
SAB_STATUS_BYTES = 1;
|
|
1698
|
-
SAB_STATUS_JSON = 2;
|
|
1699
|
-
SAB_STATUS_VOID = 3;
|
|
1700
|
-
SAB_STATUS_ERRNO = 4;
|
|
1701
|
-
SAB_DEFAULT_WINDOW_BYTES = 1024 * 1024;
|
|
1702
|
-
SAB_MIN_BYTES = SAB_HEADER_BYTES + 4096;
|
|
1703
|
-
SYNC_SAB_REQ_MSG = "sync-sab-req";
|
|
1704
|
-
SYNC_SAB_NEXT_MSG = "sync-sab-next";
|
|
1705
|
-
encoder = new TextEncoder();
|
|
1706
|
-
decoder = new TextDecoder();
|
|
1707
|
-
}
|
|
1708
|
-
});
|
|
1709
|
-
|
|
1710
1749
|
// src/realm/sync-sab-bridge.ts
|
|
1711
1750
|
function createSyncSabTransport(sab, port2, deps = {}) {
|
|
1712
1751
|
const views = sabViews(sab);
|
|
1713
1752
|
const { header, window } = views;
|
|
1714
|
-
const wait2 = deps.wait ?? ((a, i, v, t) =>
|
|
1753
|
+
const wait2 = deps.wait ?? ((a, i, v, t) => rawWait(a, i, v, t));
|
|
1715
1754
|
const now = deps.now ?? (() => performance.now());
|
|
1716
1755
|
let seq = 0;
|
|
1717
1756
|
function awaitReady(id, deadline, label) {
|
|
@@ -1915,6 +1954,7 @@ function createSyncFsSabBridge(transport, opts = {}) {
|
|
|
1915
1954
|
var init_sync_sab_bridge = __esm({
|
|
1916
1955
|
"src/realm/sync-sab-bridge.ts"() {
|
|
1917
1956
|
"use strict";
|
|
1957
|
+
init_cpu_clock();
|
|
1918
1958
|
init_sync_fs_wire();
|
|
1919
1959
|
init_sync_sab_wire();
|
|
1920
1960
|
}
|
|
@@ -3153,13 +3193,13 @@ function describeInherited(Fs, sys, streams, livePath, actions = []) {
|
|
|
3153
3193
|
if (from) table.set(target, { stream: from.stream, cloexec: false });
|
|
3154
3194
|
else table.delete(target);
|
|
3155
3195
|
}
|
|
3156
|
-
const
|
|
3196
|
+
const slots3 = /* @__PURE__ */ new Map();
|
|
3157
3197
|
for (const [fd, { stream, cloexec }] of table) {
|
|
3158
|
-
if (fd > 2 && !cloexec)
|
|
3198
|
+
if (fd > 2 && !cloexec) slots3.set(fd, stream);
|
|
3159
3199
|
}
|
|
3160
3200
|
const promote = vfsPromoter(Fs, sys, streams, livePath);
|
|
3161
3201
|
const out = [];
|
|
3162
|
-
for (const [fd, stream] of
|
|
3202
|
+
for (const [fd, stream] of slots3) {
|
|
3163
3203
|
promote(stream);
|
|
3164
3204
|
const slot = inheritedSlot(fd, stream);
|
|
3165
3205
|
if (slot) out.push(slot);
|
|
@@ -3358,12 +3398,12 @@ function anySelect(Fs, transport, read2, write2, timeoutMs) {
|
|
|
3358
3398
|
const kernelRead = read2.filter((fd) => !own(fd));
|
|
3359
3399
|
const kernelWrite = write2.filter((fd) => !own(fd));
|
|
3360
3400
|
for (; ; ) {
|
|
3361
|
-
const
|
|
3362
|
-
const pending =
|
|
3401
|
+
const local2 = ownReady(Fs, read2.filter(own), write2.filter(own));
|
|
3402
|
+
const pending = local2.read.length > 0 || local2.write.length > 0;
|
|
3363
3403
|
const slice = pending ? 0 : Math.min(SELECT_SLICE_MS, Math.max(0, deadline - Date.now()));
|
|
3364
3404
|
const got = kernelSelect(Fs, transport, kernelRead, kernelWrite, slice);
|
|
3365
3405
|
if (typeof got === "number") return got;
|
|
3366
|
-
const ready = { read: [...
|
|
3406
|
+
const ready = { read: [...local2.read, ...got.read], write: [...local2.write, ...got.write] };
|
|
3367
3407
|
if (ready.read.length > 0 || ready.write.length > 0 || Date.now() >= deadline) {
|
|
3368
3408
|
return ready;
|
|
3369
3409
|
}
|
|
@@ -3902,8 +3942,8 @@ function pidStat(info, boot) {
|
|
|
3902
3942
|
0,
|
|
3903
3943
|
0,
|
|
3904
3944
|
0,
|
|
3905
|
-
0,
|
|
3906
|
-
0,
|
|
3945
|
+
ticks(info.utime ?? 0),
|
|
3946
|
+
ticks(info.stime ?? 0),
|
|
3907
3947
|
0,
|
|
3908
3948
|
0,
|
|
3909
3949
|
20,
|
|
@@ -3996,19 +4036,23 @@ function systemFile(name2, listing, now, memory) {
|
|
|
3996
4036
|
if (name2 === "meminfo") {
|
|
3997
4037
|
return memoryInfo(
|
|
3998
4038
|
memory,
|
|
3999
|
-
listing.processes.reduce((
|
|
4039
|
+
listing.processes.reduce((sum2, p) => sum2 + p.memory, 0)
|
|
4000
4040
|
);
|
|
4001
4041
|
}
|
|
4002
4042
|
const live = listing.processes.filter((p) => p.state !== "Z");
|
|
4003
4043
|
if (name2 === "loadavg") {
|
|
4004
4044
|
const last = Math.max(0, ...listing.processes.map((p) => p.pid));
|
|
4005
|
-
|
|
4045
|
+
const [one, five, fifteen] = (listing.load ?? [0, 0, 0]).map((n) => n.toFixed(2));
|
|
4046
|
+
return `${one} ${five} ${fifteen} 1/${live.length} ${last}
|
|
4006
4047
|
`;
|
|
4007
4048
|
}
|
|
4008
|
-
const
|
|
4049
|
+
const sum = (key) => listing.cpu?.[key] ?? listing.processes.reduce((n, p) => n + (p[key] ?? 0), 0);
|
|
4050
|
+
const user = ticks(sum("utime"));
|
|
4051
|
+
const system = ticks(sum("stime"));
|
|
4052
|
+
const idle = listing.cpu ? ticks(listing.cpu.idle) : Math.max(0, ticks(now - listing.boot) - user - system);
|
|
4009
4053
|
return [
|
|
4010
|
-
`cpu
|
|
4011
|
-
`cpu0
|
|
4054
|
+
`cpu ${user} 0 ${system} ${idle} 0 0 0 0 0 0`,
|
|
4055
|
+
`cpu0 ${user} 0 ${system} ${idle} 0 0 0 0 0 0`,
|
|
4012
4056
|
"intr 0",
|
|
4013
4057
|
"ctxt 0",
|
|
4014
4058
|
`btime ${Math.floor(listing.boot / 1e3)}`,
|
|
@@ -7307,8 +7351,8 @@ var init_wasix_process = __esm({
|
|
|
7307
7351
|
];
|
|
7308
7352
|
return { stdio, inherit, cwd, opened };
|
|
7309
7353
|
}
|
|
7310
|
-
applyFdOp(op,
|
|
7311
|
-
const { map, nulls, opened } =
|
|
7354
|
+
applyFdOp(op, slots3, cwd) {
|
|
7355
|
+
const { map, nulls, opened } = slots3;
|
|
7312
7356
|
const { fds } = this.host;
|
|
7313
7357
|
const point = (fd, kfd) => {
|
|
7314
7358
|
if (kfd === void 0) {
|
|
@@ -10909,7 +10953,7 @@ function childOps(kernel, io, defaults) {
|
|
|
10909
10953
|
const mine = [];
|
|
10910
10954
|
const theirs = [];
|
|
10911
10955
|
try {
|
|
10912
|
-
const stdio = await
|
|
10956
|
+
const stdio = await slots2(kernel, o, mine, theirs);
|
|
10913
10957
|
const pid = await kernel.json({
|
|
10914
10958
|
op: "proc-spawn",
|
|
10915
10959
|
file,
|
|
@@ -10938,7 +10982,7 @@ async function preflight(kernel, hows) {
|
|
|
10938
10982
|
await kernel.json({ op: "fd-info", fd: how === "inherit" ? n : how });
|
|
10939
10983
|
}
|
|
10940
10984
|
}
|
|
10941
|
-
async function
|
|
10985
|
+
async function slots2(kernel, o, mine, theirs) {
|
|
10942
10986
|
const hows = STDIO2.map((name2) => o[name2] ?? "inherit");
|
|
10943
10987
|
await preflight(kernel, hows);
|
|
10944
10988
|
const stdio = [];
|
|
@@ -11488,7 +11532,7 @@ function port(n) {
|
|
|
11488
11532
|
function netOps(kernel, io) {
|
|
11489
11533
|
const name2 = async (fd, peer) => addressOf(await kernel.json({ op: "sock-name", fd, peer }));
|
|
11490
11534
|
const connection = async (fd) => {
|
|
11491
|
-
const [
|
|
11535
|
+
const [local2, remote] = [await name2(fd, false), await name2(fd, true)];
|
|
11492
11536
|
const stop = new AbortController();
|
|
11493
11537
|
let closed;
|
|
11494
11538
|
const close = () => {
|
|
@@ -11513,7 +11557,7 @@ function netOps(kernel, io) {
|
|
|
11513
11557
|
close: async () => void await shut(SHUT_WR),
|
|
11514
11558
|
abort: () => close()
|
|
11515
11559
|
});
|
|
11516
|
-
return { fd, local, remote, readable: readable2, writable: writable2, close };
|
|
11560
|
+
return { fd, local: local2, remote, readable: readable2, writable: writable2, close };
|
|
11517
11561
|
};
|
|
11518
11562
|
const resolve = async (host, signal) => {
|
|
11519
11563
|
if (IPV4.test(host)) return host;
|
|
@@ -12630,6 +12674,7 @@ var init_js_runtime = __esm({
|
|
|
12630
12674
|
init_lockdown();
|
|
12631
12675
|
|
|
12632
12676
|
// src/process/process-entry.ts
|
|
12677
|
+
init_cpu_clock();
|
|
12633
12678
|
init_protocol();
|
|
12634
12679
|
init_process_runtime();
|
|
12635
12680
|
var loadWasi = () => Promise.resolve().then(() => (init_wasi_runtime(), wasi_runtime_exports));
|
|
@@ -12667,6 +12712,8 @@ function processEntry(port2, run = runWasmProcess, wasi = loadWasi, js = loadJs,
|
|
|
12667
12712
|
const type = data?.type;
|
|
12668
12713
|
if (type !== WASM_THREAD_INIT && type !== WASM_PROCESS_INIT) return;
|
|
12669
12714
|
const refusal2 = sealOnce();
|
|
12715
|
+
const init = data;
|
|
12716
|
+
if (type === WASM_THREAD_INIT || init?.program?.abi !== "js") useLocalClock(init?.sab);
|
|
12670
12717
|
if (type === WASM_THREAD_INIT) {
|
|
12671
12718
|
if (refusal2) return failed5(refusal2.error);
|
|
12672
12719
|
wasi().then((m) => m.runWasiThread(data, port2)).catch(failed5);
|