From 770dbd4d16e5600b8da1c872640978a555f913dd Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 28 Mar 2020 20:29:08 +0100 Subject: [PATCH 1/2] fix: attach queue to fs module instead of global --- graceful-fs.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/graceful-fs.js b/graceful-fs.js index 8c75ee2..7bf8838 100644 --- a/graceful-fs.js +++ b/graceful-fs.js @@ -32,10 +32,10 @@ else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) } // Once time initialization -if (!global[gracefulQueue]) { +if (!fs[gracefulQueue]) { // This queue can be shared by multiple loaded instances var queue = [] - Object.defineProperty(global, gracefulQueue, { + Object.defineProperty(fs, gracefulQueue, { get: function() { return queue } @@ -79,8 +79,8 @@ if (!global[gracefulQueue]) { if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) { process.on('exit', function() { - debug(global[gracefulQueue]) - require('assert').equal(global[gracefulQueue].length, 0) + debug(fs[gracefulQueue]) + require('assert').equal(fs[gracefulQueue].length, 0) }) } } @@ -334,11 +334,11 @@ function patch (fs) { function enqueue (elem) { debug('ENQUEUE', elem[0].name, elem[1]) - global[gracefulQueue].push(elem) + fs[gracefulQueue].push(elem) } function retry () { - var elem = global[gracefulQueue].shift() + var elem = fs[gracefulQueue].shift() if (elem) { debug('RETRY', elem[0].name, elem[1]) elem[0].apply(null, elem[1]) From 181426ceceb180a8173b038d88321763be28913f Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Mon, 13 Apr 2020 06:35:40 -0400 Subject: [PATCH 2/2] chore: Enable backward compatibility by exposing queue to both global and fs --- graceful-fs.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/graceful-fs.js b/graceful-fs.js index 7bf8838..de3df47 100644 --- a/graceful-fs.js +++ b/graceful-fs.js @@ -21,6 +21,14 @@ if (typeof Symbol === 'function' && typeof Symbol.for === 'function') { function noop () {} +function publishQueue(context, queue) { + Object.defineProperty(context, gracefulQueue, { + get: function() { + return queue + } + }) +} + var debug = noop if (util.debuglog) debug = util.debuglog('gfs4') @@ -34,12 +42,8 @@ else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) // Once time initialization if (!fs[gracefulQueue]) { // This queue can be shared by multiple loaded instances - var queue = [] - Object.defineProperty(fs, gracefulQueue, { - get: function() { - return queue - } - }) + var queue = global[gracefulQueue] || [] + publishQueue(fs, queue) // Patch fs.close/closeSync to shared queue version, because we need // to retry() whenever a close happens *anywhere* in the program. @@ -85,6 +89,10 @@ if (!fs[gracefulQueue]) { } } +if (!global[gracefulQueue]) { + publishQueue(global, fs[gracefulQueue]); +} + module.exports = patch(clone(fs)) if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) { module.exports = patch(fs)