@ai-ecoverse/slicc-kernel 1.164.2 → 1.164.4

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.
@@ -627,6 +627,9 @@ var init_access = __esm({
627
627
  });
628
628
 
629
629
  // src/fs/changes.ts
630
+ function renameWait(view) {
631
+ return view.foreign() ? RENAME_WAIT_SHARED_MS : RENAME_WAIT_MS;
632
+ }
630
633
  function changeHash(path) {
631
634
  let h = 2166136261;
632
635
  for (let i = 0; i < path.length; i++) {
@@ -644,7 +647,7 @@ function normal(path) {
644
647
  }
645
648
  return `/${parts.join("/")}`;
646
649
  }
647
- var GEN, RING, RING_SIZE, SLOT, SHARED_TTL_MS, RENAME_WAIT_MS, DIRTY, FOREIGN, RENAMES, CHANGES_BYTES, ChangeView;
650
+ var GEN, RING, RING_SIZE, SLOT, SHARED_TTL_MS, RENAME_WAIT_MS, RENAME_WAIT_SHARED_MS, DIRTY, FOREIGN, RENAMES, CHANGES_BYTES, ChangeView;
648
651
  var init_changes = __esm({
649
652
  "src/fs/changes.ts"() {
650
653
  "use strict";
@@ -655,6 +658,7 @@ var init_changes = __esm({
655
658
  SLOT = 2;
656
659
  SHARED_TTL_MS = 100;
657
660
  RENAME_WAIT_MS = 100;
661
+ RENAME_WAIT_SHARED_MS = 1e3;
658
662
  DIRTY = RING + RING_SIZE * SLOT;
659
663
  FOREIGN = DIRTY + 1;
660
664
  RENAMES = FOREIGN + 1;
@@ -1826,7 +1830,7 @@ function renameFollower(Fs, bridgeOf, call2) {
1826
1830
  const view = bridge.changes;
1827
1831
  const since = seen.get(bridge);
1828
1832
  let now = view?.renames() ?? 0;
1829
- if (missing2 && view && now === since) now = view.awaitRename(now, RENAME_WAIT_MS);
1833
+ if (missing2 && view && now === since) now = view.awaitRename(now, renameWait(view));
1830
1834
  const ask = bridge.renames?.bind(bridge);
1831
1835
  if (since === void 0 || now === since || !ask) return false;
1832
1836
  const held2 = [...open].filter((n) => !n.live.orphan && bridgeOf(n) === bridge);
@@ -3058,7 +3062,7 @@ var init_version = __esm({
3058
3062
  "src/version.ts"() {
3059
3063
  "use strict";
3060
3064
  init_captured_globals();
3061
- KERNEL_VERSION = true ? "1.164.2" : "0.0.0-dev";
3065
+ KERNEL_VERSION = true ? "1.164.4" : "0.0.0-dev";
3062
3066
  OS_RELEASE = "6.0.0-slicc";
3063
3067
  }
3064
3068
  });
@@ -7470,7 +7474,7 @@ function pinnedIo2(bridge, handle, rewriting) {
7470
7474
  } : {}
7471
7475
  };
7472
7476
  }
7473
- var WasiError, FileBuffer, LocalFile, MAX_LINKS, MISS_TTL_MS, CACHE_CAP, FS_GEN, CRED_GEN, UMASK2, RING2, RING_SIZE2, SLOT2, FD_RING, FD_RING_SIZE, SHARED_IDS_BYTES, StatCache, SEEN_CAP, SeenAt, remember, Fills;
7477
+ var FOLLOW_MS, WasiError, FileBuffer, LocalFile, MAX_LINKS, MISS_TTL_MS, CACHE_CAP, FS_GEN, CRED_GEN, UMASK2, RING2, RING_SIZE2, SLOT2, FD_RING, FD_RING_SIZE, SHARED_IDS_BYTES, StatCache, SEEN_CAP, SeenAt, remember, Fills;
7474
7478
  var init_wasi_files = __esm({
7475
7479
  "src/process/wasi/wasi-files.ts"() {
7476
7480
  "use strict";
@@ -7478,6 +7482,7 @@ var init_wasi_files = __esm({
7478
7482
  init_changes();
7479
7483
  init_ranged();
7480
7484
  init_sync_fs_wire();
7485
+ FOLLOW_MS = 2e3;
7481
7486
  WasiError = class extends capturedError {
7482
7487
  code;
7483
7488
  constructor(code2) {
@@ -7528,11 +7533,14 @@ var init_wasi_files = __esm({
7528
7533
  return this.where;
7529
7534
  }
7530
7535
  retried(op) {
7531
- try {
7532
- return op();
7533
- } catch (err) {
7534
- if (err.code !== "ENOENT" || !this.moved?.(true)) throw err;
7535
- return op();
7536
+ const end = capturedperformance.now() + FOLLOW_MS;
7537
+ for (; ; ) {
7538
+ try {
7539
+ return op();
7540
+ } catch (err) {
7541
+ const gone2 = err.code === "ENOENT";
7542
+ if (!gone2 || capturedperformance.now() > end || !this.moved?.(true)) throw err;
7543
+ }
7536
7544
  }
7537
7545
  }
7538
7546
  set path(path) {
@@ -9174,15 +9182,27 @@ var init_wasi_fds = __esm({
9174
9182
  }
9175
9183
  followRenames(missing2 = false) {
9176
9184
  const view = this.fs.changes;
9177
- let now = view?.renames() ?? 0;
9178
- if (missing2 && view && now === this.renamesSeen) now = view.awaitRename(now, RENAME_WAIT_MS);
9179
- if (now === this.renamesSeen || !this.fs.renames) return false;
9185
+ const end = missing2 && view ? capturedperformance.now() + renameWait(view) : 0;
9186
+ const start2 = this.renamesSeen;
9187
+ for (; ; ) {
9188
+ const now = view?.renames() ?? 0;
9189
+ if (now !== this.renamesSeen && this.fs.renames && this.followTo(now)) return true;
9190
+ if (missing2 && this.renamesSeen !== start2) return true;
9191
+ const left = end - capturedperformance.now();
9192
+ if (!view || left <= 0) return false;
9193
+ view.awaitRename(now, left);
9194
+ }
9195
+ }
9196
+ followTo(now) {
9180
9197
  const held2 = [...this.buffers].filter(([, b]) => !b.isOrphan()).map(([p]) => p);
9181
9198
  if (held2.length === 0) {
9182
9199
  this.renamesSeen = now;
9183
9200
  return false;
9184
9201
  }
9185
- const { now: seen, renames } = this.fs.renames(this.renamesSeen, held2);
9202
+ const { now: seen, renames } = this.fs.renames(
9203
+ this.renamesSeen,
9204
+ held2
9205
+ );
9186
9206
  this.renamesSeen = seen;
9187
9207
  for (const [from, to] of renames) this.renamed(from, to, void 0, true);
9188
9208
  return renames.length > 0;