@ai-ecoverse/slicc-kernel 1.164.2 → 1.164.3

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.
@@ -338,6 +338,9 @@ var init_wasi_abi = __esm({
338
338
  });
339
339
 
340
340
  // src/fs/changes.ts
341
+ function renameWait(view) {
342
+ return view.foreign() ? RENAME_WAIT_SHARED_MS : RENAME_WAIT_MS;
343
+ }
341
344
  function changeHash(path) {
342
345
  let h = 2166136261;
343
346
  for (let i = 0; i < path.length; i++) {
@@ -355,7 +358,7 @@ function normal(path) {
355
358
  }
356
359
  return `/${parts.join("/")}`;
357
360
  }
358
- var GEN, RING, RING_SIZE, SLOT, SHARED_TTL_MS, RENAME_WAIT_MS, DIRTY, FOREIGN, RENAMES, CHANGES_BYTES, ChangeView;
361
+ var GEN, RING, RING_SIZE, SLOT, SHARED_TTL_MS, RENAME_WAIT_MS, RENAME_WAIT_SHARED_MS, DIRTY, FOREIGN, RENAMES, CHANGES_BYTES, ChangeView;
359
362
  var init_changes = __esm({
360
363
  "src/fs/changes.ts"() {
361
364
  "use strict";
@@ -366,6 +369,7 @@ var init_changes = __esm({
366
369
  SLOT = 2;
367
370
  SHARED_TTL_MS = 100;
368
371
  RENAME_WAIT_MS = 100;
372
+ RENAME_WAIT_SHARED_MS = 1e3;
369
373
  DIRTY = RING + RING_SIZE * SLOT;
370
374
  FOREIGN = DIRTY + 1;
371
375
  RENAMES = FOREIGN + 1;
@@ -1141,7 +1145,7 @@ function pinnedIo(bridge, handle, rewriting) {
1141
1145
  } : {}
1142
1146
  };
1143
1147
  }
1144
- var WasiError, FileBuffer, LocalFile, MAX_LINKS, MISS_TTL_MS, CACHE_CAP, FS_GEN, CRED_GEN, UMASK, RING2, RING_SIZE2, SLOT2, FD_RING, FD_RING_SIZE, SHARED_IDS_BYTES, StatCache, SEEN_CAP, SeenAt, remember, Fills;
1148
+ var FOLLOW_MS, WasiError, FileBuffer, LocalFile, MAX_LINKS, MISS_TTL_MS, CACHE_CAP, FS_GEN, CRED_GEN, UMASK, RING2, RING_SIZE2, SLOT2, FD_RING, FD_RING_SIZE, SHARED_IDS_BYTES, StatCache, SEEN_CAP, SeenAt, remember, Fills;
1145
1149
  var init_wasi_files = __esm({
1146
1150
  "src/process/wasi/wasi-files.ts"() {
1147
1151
  "use strict";
@@ -1149,6 +1153,7 @@ var init_wasi_files = __esm({
1149
1153
  init_changes();
1150
1154
  init_ranged();
1151
1155
  init_sync_fs_wire();
1156
+ FOLLOW_MS = 2e3;
1152
1157
  WasiError = class extends capturedError {
1153
1158
  code;
1154
1159
  constructor(code2) {
@@ -1199,11 +1204,14 @@ var init_wasi_files = __esm({
1199
1204
  return this.where;
1200
1205
  }
1201
1206
  retried(op) {
1202
- try {
1203
- return op();
1204
- } catch (err) {
1205
- if (err.code !== "ENOENT" || !this.moved?.(true)) throw err;
1206
- return op();
1207
+ const end = capturedperformance.now() + FOLLOW_MS;
1208
+ for (; ; ) {
1209
+ try {
1210
+ return op();
1211
+ } catch (err) {
1212
+ const gone2 = err.code === "ENOENT";
1213
+ if (!gone2 || capturedperformance.now() > end || !this.moved?.(true)) throw err;
1214
+ }
1207
1215
  }
1208
1216
  }
1209
1217
  set path(path) {
@@ -3626,15 +3634,27 @@ var init_wasi_fds = __esm({
3626
3634
  }
3627
3635
  followRenames(missing2 = false) {
3628
3636
  const view = this.fs.changes;
3629
- let now = view?.renames() ?? 0;
3630
- if (missing2 && view && now === this.renamesSeen) now = view.awaitRename(now, RENAME_WAIT_MS);
3631
- if (now === this.renamesSeen || !this.fs.renames) return false;
3637
+ const end = missing2 && view ? capturedperformance.now() + renameWait(view) : 0;
3638
+ const start2 = this.renamesSeen;
3639
+ for (; ; ) {
3640
+ const now = view?.renames() ?? 0;
3641
+ if (now !== this.renamesSeen && this.fs.renames && this.followTo(now)) return true;
3642
+ if (missing2 && this.renamesSeen !== start2) return true;
3643
+ const left = end - capturedperformance.now();
3644
+ if (!view || left <= 0) return false;
3645
+ view.awaitRename(now, left);
3646
+ }
3647
+ }
3648
+ followTo(now) {
3632
3649
  const held2 = [...this.buffers].filter(([, b]) => !b.isOrphan()).map(([p]) => p);
3633
3650
  if (held2.length === 0) {
3634
3651
  this.renamesSeen = now;
3635
3652
  return false;
3636
3653
  }
3637
- const { now: seen2, renames } = this.fs.renames(this.renamesSeen, held2);
3654
+ const { now: seen2, renames } = this.fs.renames(
3655
+ this.renamesSeen,
3656
+ held2
3657
+ );
3638
3658
  this.renamesSeen = seen2;
3639
3659
  for (const [from, to] of renames) this.renamed(from, to, void 0, true);
3640
3660
  return renames.length > 0;
@@ -7365,7 +7385,7 @@ var init_version = __esm({
7365
7385
  "src/version.ts"() {
7366
7386
  "use strict";
7367
7387
  init_captured_globals();
7368
- KERNEL_VERSION = true ? "1.164.2" : "0.0.0-dev";
7388
+ KERNEL_VERSION = true ? "1.164.3" : "0.0.0-dev";
7369
7389
  OS_RELEASE = "6.0.0-slicc";
7370
7390
  }
7371
7391
  });
@@ -9007,7 +9027,7 @@ function renameFollower(Fs, bridgeOf, call3) {
9007
9027
  const view = bridge.changes;
9008
9028
  const since = seen2.get(bridge);
9009
9029
  let now = view?.renames() ?? 0;
9010
- if (missing2 && view && now === since) now = view.awaitRename(now, RENAME_WAIT_MS);
9030
+ if (missing2 && view && now === since) now = view.awaitRename(now, renameWait(view));
9011
9031
  const ask = bridge.renames?.bind(bridge);
9012
9032
  if (since === void 0 || now === since || !ask) return false;
9013
9033
  const held2 = [...open].filter((n) => !n.live.orphan && bridgeOf(n) === bridge);