fde2e-bu 1.3.1 → 1.3.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/package.json +1 -1
- package/src/nm/asset.mjs +9 -1
package/package.json
CHANGED
package/src/nm/asset.mjs
CHANGED
|
@@ -261,7 +261,15 @@ export async function assetFetchHost(msg, deps = {}) {
|
|
|
261
261
|
if (err?.name === 'AssetFetchError' && ASSET_ERROR_CODES.has(err.code)) throw err; // too-large 等本模块错误原样透传
|
|
262
262
|
throw assetError('io', `资产落盘中断:${err?.message ?? err}`);
|
|
263
263
|
} finally {
|
|
264
|
-
|
|
264
|
+
// 先等 sink 真正 close 再走外层清理——CI 实证(ubuntu/overlayfs):destroy 是异步
|
|
265
|
+
// 语义,rmSync 抢跑会残留 .tmp(main run 39895242723 flake;mac 30 连跑不可复现)
|
|
266
|
+
await new Promise((resolve) => {
|
|
267
|
+
let settled = false;
|
|
268
|
+
const fin = () => { if (!settled) { settled = true; resolve(); } };
|
|
269
|
+
sink.once('close', fin);
|
|
270
|
+
try { sink.destroy(); } catch { fin(); /* 已关闭 */ }
|
|
271
|
+
setTimeout(fin, 1000); // close 事件缺席的兜底(不无限等)
|
|
272
|
+
});
|
|
265
273
|
}
|
|
266
274
|
try {
|
|
267
275
|
fsMod.renameSync(tempPath, finalPath);
|