From 96ddcbe67a47215d85e443f21237048f82d5feb0 Mon Sep 17 00:00:00 2001 From: ztimson Date: Sat, 22 Aug 2026 17:57:19 -0400 Subject: [PATCH] Garbage colleciton fix --- package.json | 2 +- src/manager.js | 8 ++++++-- src/reader.js | 10 ++++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5670a68..5ba296b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/zim-utils", - "version": "0.2.2", + "version": "0.2.3", "description": "Native, dependency-light ZIM archive reader/searcher and Kiwix catalog downloader for Node.js", "author": "Zak Timson", "license": "MIT", diff --git a/src/manager.js b/src/manager.js index abfc02a..e2b1c24 100644 --- a/src/manager.js +++ b/src/manager.js @@ -169,8 +169,12 @@ export class ZimManager { pending = new ZimReader(file, {clusterTTL: this.#clusterTTL}).open(); this.#opening.set(file, pending); } - const reader = await pending; - this.#opening.delete(file); + let reader; + try { + reader = await pending; + } finally { + this.#opening.delete(file); + } entry = this.#readers.get(file) ?? {reader}; this.#readers.set(file, entry); } diff --git a/src/reader.js b/src/reader.js index 82ac83b..905e29c 100644 --- a/src/reader.js +++ b/src/reader.js @@ -294,8 +294,14 @@ export class ZimReader { /** Opens the archive and parses its header + mimetype list. */ async open() { this.#fd = await fs.promises.open(this.path, 'r'); - await this.#readHeader(); - await this.#readMimeTypes(); + try { + await this.#readHeader(); + await this.#readMimeTypes(); + } catch (e) { + await this.#fd.close(); + this.#fd = null; + throw e; + } return this; }