@ai-ecoverse/slicc-kernel 1.102.1 → 1.102.2
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 +15 -7
- package/dist/kernel-worker.js +67 -45
- package/dist/kernel-worker.js.map +4 -4
- package/dist/node-process-worker.js +1 -1
- package/dist/node.js +67 -45
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +1 -1
- package/package.json +1 -1
|
@@ -4774,7 +4774,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
4774
4774
|
var init_version = __esm({
|
|
4775
4775
|
"src/version.ts"() {
|
|
4776
4776
|
"use strict";
|
|
4777
|
-
KERNEL_VERSION = true ? "1.102.
|
|
4777
|
+
KERNEL_VERSION = true ? "1.102.2" : "0.0.0-dev";
|
|
4778
4778
|
OS_RELEASE = "6.0.0-slicc";
|
|
4779
4779
|
}
|
|
4780
4780
|
});
|
package/dist/node.js
CHANGED
|
@@ -11129,7 +11129,7 @@ var PATH_OPS = new Set(SYNC_FS_OPS);
|
|
|
11129
11129
|
var EARLY_WHOLE_FILE = 64 * 1024;
|
|
11130
11130
|
|
|
11131
11131
|
// src/version.ts
|
|
11132
|
-
var KERNEL_VERSION = true ? "1.102.
|
|
11132
|
+
var KERNEL_VERSION = true ? "1.102.2" : "0.0.0-dev";
|
|
11133
11133
|
var OS_RELEASE = "6.0.0-slicc";
|
|
11134
11134
|
function procVersion() {
|
|
11135
11135
|
return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
|
|
@@ -11643,6 +11643,41 @@ var EventFd = class _EventFd {
|
|
|
11643
11643
|
}
|
|
11644
11644
|
};
|
|
11645
11645
|
|
|
11646
|
+
// src/kernel/timer.ts
|
|
11647
|
+
var TIMER_MAX_MS = 2147483647;
|
|
11648
|
+
function timerAt(deadline, fire) {
|
|
11649
|
+
let timer;
|
|
11650
|
+
const arm = () => {
|
|
11651
|
+
const left = deadline - performance.now();
|
|
11652
|
+
if (left > 0) {
|
|
11653
|
+
timer = setTimeout(arm, Math.min(left, TIMER_MAX_MS));
|
|
11654
|
+
return;
|
|
11655
|
+
}
|
|
11656
|
+
timer = void 0;
|
|
11657
|
+
fire();
|
|
11658
|
+
};
|
|
11659
|
+
timer = setTimeout(arm, Math.min(Math.max(0, deadline - performance.now()), TIMER_MAX_MS));
|
|
11660
|
+
return () => clearTimeout(timer);
|
|
11661
|
+
}
|
|
11662
|
+
function timerAfter(ms, fire) {
|
|
11663
|
+
return timerAt(performance.now() + ms, fire);
|
|
11664
|
+
}
|
|
11665
|
+
function repeating(first, every, fire) {
|
|
11666
|
+
let next2 = performance.now() + first;
|
|
11667
|
+
let cancel = () => {
|
|
11668
|
+
};
|
|
11669
|
+
const tick = () => {
|
|
11670
|
+
fire();
|
|
11671
|
+
if (every <= 0) return;
|
|
11672
|
+
next2 += every;
|
|
11673
|
+
const now = performance.now();
|
|
11674
|
+
if (next2 <= now) next2 += (Math.floor((now - next2) / every) + 1) * every;
|
|
11675
|
+
cancel = timerAt(next2, tick);
|
|
11676
|
+
};
|
|
11677
|
+
cancel = timerAt(next2, tick);
|
|
11678
|
+
return () => cancel();
|
|
11679
|
+
}
|
|
11680
|
+
|
|
11646
11681
|
// src/kernel/epoll.ts
|
|
11647
11682
|
var EPOLL = {
|
|
11648
11683
|
IN: 1,
|
|
@@ -11694,11 +11729,11 @@ function lookup(fds, fd) {
|
|
|
11694
11729
|
}
|
|
11695
11730
|
function pause(ms, signal) {
|
|
11696
11731
|
return new Promise((resolve2) => {
|
|
11697
|
-
const
|
|
11732
|
+
const cancel = timerAfter(ms, resolve2);
|
|
11698
11733
|
signal.addEventListener(
|
|
11699
11734
|
"abort",
|
|
11700
11735
|
() => {
|
|
11701
|
-
|
|
11736
|
+
cancel();
|
|
11702
11737
|
resolve2();
|
|
11703
11738
|
},
|
|
11704
11739
|
{ once: true }
|
|
@@ -11764,17 +11799,14 @@ var EpollFile = class _EpollFile {
|
|
|
11764
11799
|
const round = new AbortController();
|
|
11765
11800
|
const woken = this.changes.wait(AbortSignal.any([round.signal, signal]));
|
|
11766
11801
|
woken.catch(() => void 0);
|
|
11767
|
-
let
|
|
11768
|
-
|
|
11769
|
-
|
|
11770
|
-
(resolve2) => timer = setTimeout(resolve2, deadline - performance.now())
|
|
11771
|
-
)
|
|
11772
|
-
];
|
|
11802
|
+
let cancel = () => {
|
|
11803
|
+
};
|
|
11804
|
+
const expiry = deadline === Number.POSITIVE_INFINITY ? [] : [new Promise((resolve2) => cancel = timerAt(deadline, resolve2))];
|
|
11773
11805
|
try {
|
|
11774
11806
|
await Promise.race([woken, ...expiry]);
|
|
11775
11807
|
} finally {
|
|
11776
11808
|
round.abort();
|
|
11777
|
-
|
|
11809
|
+
cancel();
|
|
11778
11810
|
}
|
|
11779
11811
|
}
|
|
11780
11812
|
}
|
|
@@ -12119,9 +12151,10 @@ var AsyncOps = class {
|
|
|
12119
12151
|
}
|
|
12120
12152
|
sleep(timeoutMs, signal) {
|
|
12121
12153
|
return new Promise((resolve2, reject) => {
|
|
12122
|
-
let
|
|
12154
|
+
let cancel = () => {
|
|
12155
|
+
};
|
|
12123
12156
|
const cleanup = () => {
|
|
12124
|
-
|
|
12157
|
+
cancel();
|
|
12125
12158
|
this.waiters.delete(wake);
|
|
12126
12159
|
signal.removeEventListener("abort", abort);
|
|
12127
12160
|
};
|
|
@@ -12136,10 +12169,10 @@ var AsyncOps = class {
|
|
|
12136
12169
|
this.waiters.add(wake);
|
|
12137
12170
|
signal.addEventListener("abort", abort, { once: true });
|
|
12138
12171
|
if (timeoutMs !== void 0) {
|
|
12139
|
-
|
|
12172
|
+
cancel = timerAfter(timeoutMs, () => {
|
|
12140
12173
|
cleanup();
|
|
12141
12174
|
resolve2(false);
|
|
12142
|
-
}
|
|
12175
|
+
});
|
|
12143
12176
|
}
|
|
12144
12177
|
});
|
|
12145
12178
|
}
|
|
@@ -14190,14 +14223,14 @@ async function runChild(req, deps) {
|
|
|
14190
14223
|
return frame2(outcome2, new Uint8Array(0), new Uint8Array(0));
|
|
14191
14224
|
}
|
|
14192
14225
|
if (failure !== void 0) kill();
|
|
14193
|
-
const
|
|
14226
|
+
const cancel = req.timeoutMs !== void 0 && req.timeoutMs > 0 ? timerAfter(req.timeoutMs, () => stop("ETIMEDOUT")) : void 0;
|
|
14194
14227
|
let status;
|
|
14195
14228
|
try {
|
|
14196
14229
|
status = await reaped(deps, pid);
|
|
14197
14230
|
const open = controls.filter((c) => c.opened);
|
|
14198
14231
|
await Promise.race([Promise.all(open.map((c) => c.eof)), decided.promise]);
|
|
14199
14232
|
} finally {
|
|
14200
|
-
|
|
14233
|
+
cancel?.();
|
|
14201
14234
|
for (const control of controls) control.shut = true;
|
|
14202
14235
|
}
|
|
14203
14236
|
const out = deps.children.captured(pid, 1);
|
|
@@ -14253,27 +14286,23 @@ async function waitReady(fds, read, write, deadline, interrupted3) {
|
|
|
14253
14286
|
const file = fds.get(fd).file;
|
|
14254
14287
|
return file.changed === void 0 ? [] : [file.changed(round.signal).catch(() => void 0)];
|
|
14255
14288
|
});
|
|
14256
|
-
let
|
|
14257
|
-
|
|
14258
|
-
|
|
14259
|
-
(resolve2) => timer = setTimeout(resolve2, deadline - performance.now())
|
|
14260
|
-
)
|
|
14261
|
-
];
|
|
14289
|
+
let cancel = () => {
|
|
14290
|
+
};
|
|
14291
|
+
const expiry = deadline === Number.POSITIVE_INFINITY ? [] : [new Promise((resolve2) => cancel = timerAt(deadline, resolve2))];
|
|
14262
14292
|
try {
|
|
14263
14293
|
await Promise.race([...changes, ...expiry, interrupted3]);
|
|
14264
14294
|
} finally {
|
|
14265
14295
|
round.abort();
|
|
14266
|
-
|
|
14296
|
+
cancel();
|
|
14267
14297
|
}
|
|
14268
14298
|
}
|
|
14269
14299
|
}
|
|
14270
14300
|
|
|
14271
14301
|
// src/kernel/sem.ts
|
|
14272
14302
|
var SEM_VALUE_MAX = 2147483647;
|
|
14273
|
-
var SEM_NAMES_MAX =
|
|
14274
|
-
var SEM_HANDLES_MAX =
|
|
14303
|
+
var SEM_NAMES_MAX = 65536;
|
|
14304
|
+
var SEM_HANDLES_MAX = 65536;
|
|
14275
14305
|
var NAME_MAX = 251;
|
|
14276
|
-
var TIMER_MAX_MS = 2147483647;
|
|
14277
14306
|
var SEM_OPS = [
|
|
14278
14307
|
"sem-open",
|
|
14279
14308
|
"sem-close",
|
|
@@ -14310,11 +14339,12 @@ var Semaphore = class {
|
|
|
14310
14339
|
if (signal.aborted) return Promise.reject(new KernelError("EINTR"));
|
|
14311
14340
|
return new Promise((resolve2, reject) => {
|
|
14312
14341
|
const deadline = timeoutMs < 0 ? Number.POSITIVE_INFINITY : performance.now() + timeoutMs;
|
|
14313
|
-
let
|
|
14342
|
+
let cancel = () => {
|
|
14343
|
+
};
|
|
14314
14344
|
const leave = () => {
|
|
14315
14345
|
const at = this.waiters.indexOf(waiter);
|
|
14316
14346
|
if (at >= 0) this.waiters.splice(at, 1);
|
|
14317
|
-
|
|
14347
|
+
cancel();
|
|
14318
14348
|
signal.removeEventListener("abort", abort);
|
|
14319
14349
|
};
|
|
14320
14350
|
const waiter = {
|
|
@@ -14328,18 +14358,13 @@ var Semaphore = class {
|
|
|
14328
14358
|
reject(new KernelError("EINTR"));
|
|
14329
14359
|
};
|
|
14330
14360
|
const expire = () => {
|
|
14331
|
-
const left = deadline - performance.now();
|
|
14332
|
-
if (left > 0) {
|
|
14333
|
-
timer = setTimeout(expire, Math.min(left, TIMER_MAX_MS));
|
|
14334
|
-
return;
|
|
14335
|
-
}
|
|
14336
14361
|
leave();
|
|
14337
14362
|
resolve2(false);
|
|
14338
14363
|
};
|
|
14339
14364
|
this.waiters.push(waiter);
|
|
14340
14365
|
signal.addEventListener("abort", abort, { once: true });
|
|
14341
14366
|
if (deadline !== Number.POSITIVE_INFINITY) {
|
|
14342
|
-
|
|
14367
|
+
cancel = timerAt(deadline, expire);
|
|
14343
14368
|
}
|
|
14344
14369
|
});
|
|
14345
14370
|
}
|
|
@@ -14374,6 +14399,10 @@ var SemTable = class {
|
|
|
14374
14399
|
var SemHandles = class _SemHandles {
|
|
14375
14400
|
byHandle = /* @__PURE__ */ new Map();
|
|
14376
14401
|
next = 1;
|
|
14402
|
+
limit;
|
|
14403
|
+
constructor(limit = SEM_HANDLES_MAX) {
|
|
14404
|
+
this.limit = limit;
|
|
14405
|
+
}
|
|
14377
14406
|
add(sem) {
|
|
14378
14407
|
for (const [handle2, entry] of this.byHandle) {
|
|
14379
14408
|
if (entry.sem === sem) {
|
|
@@ -14381,7 +14410,7 @@ var SemHandles = class _SemHandles {
|
|
|
14381
14410
|
return handle2;
|
|
14382
14411
|
}
|
|
14383
14412
|
}
|
|
14384
|
-
if (this.byHandle.size >=
|
|
14413
|
+
if (this.byHandle.size >= this.limit) throw new KernelError("EMFILE");
|
|
14385
14414
|
const handle = this.next++;
|
|
14386
14415
|
this.byHandle.set(handle, { sem, opens: 1 });
|
|
14387
14416
|
return handle;
|
|
@@ -14397,7 +14426,7 @@ var SemHandles = class _SemHandles {
|
|
|
14397
14426
|
if (--entry.opens === 0) this.byHandle.delete(handle);
|
|
14398
14427
|
}
|
|
14399
14428
|
fork() {
|
|
14400
|
-
const child = new _SemHandles();
|
|
14429
|
+
const child = new _SemHandles(this.limit);
|
|
14401
14430
|
child.next = this.next;
|
|
14402
14431
|
for (const [handle, entry] of this.byHandle) child.byHandle.set(handle, { ...entry });
|
|
14403
14432
|
return child;
|
|
@@ -16684,17 +16713,12 @@ var WasmProcess = class {
|
|
|
16684
16713
|
(req, cancelled) => this.syscall(req, cancelled),
|
|
16685
16714
|
() => this.options.onAsync?.()
|
|
16686
16715
|
);
|
|
16687
|
-
alarmEvery;
|
|
16688
16716
|
setAlarm(sig, first, every, timer) {
|
|
16689
16717
|
if (!isSignal(sig)) throw new KernelError("EINVAL");
|
|
16690
16718
|
this.clearAlarm();
|
|
16691
16719
|
if (first <= 0) return;
|
|
16692
16720
|
const fire = timer === void 0 ? () => this.options.raise?.(sig) : () => this.timerExpired(timer);
|
|
16693
|
-
this.alarm =
|
|
16694
|
-
this.alarm = void 0;
|
|
16695
|
-
fire();
|
|
16696
|
-
if (every > 0) this.alarmEvery = setInterval(fire, every);
|
|
16697
|
-
}, first);
|
|
16721
|
+
this.alarm = repeating(first, every, fire);
|
|
16698
16722
|
}
|
|
16699
16723
|
timerExpired(which) {
|
|
16700
16724
|
this.options.onTimer?.(which);
|
|
@@ -16703,10 +16727,8 @@ var WasmProcess = class {
|
|
|
16703
16727
|
blocked2.abort();
|
|
16704
16728
|
}
|
|
16705
16729
|
clearAlarm() {
|
|
16706
|
-
|
|
16707
|
-
clearInterval(this.alarmEvery);
|
|
16730
|
+
this.alarm?.();
|
|
16708
16731
|
this.alarm = void 0;
|
|
16709
|
-
this.alarmEvery = void 0;
|
|
16710
16732
|
}
|
|
16711
16733
|
async exit() {
|
|
16712
16734
|
if (this.exited) return;
|