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; }