fs-monkey icon indicating copy to clipboard operation
fs-monkey copied to clipboard

Endless recursion when using `patchFs` with `unionfs`

Open rrthomas opened this issue 4 years ago • 1 comments

The following code:

unionfs = require('unionfs')
ufs = unionfs.ufs
fs = require('fs')
ufs.use(fs)
fsMonkey = require('fs-monkey')
patchFs = fsMonkey.patchFs
patchFs(ufs)

fs.readdirSync('/')

gives the error:

…/node_modules/unionfs/lib/union.js:346
                        throw err;
                        ^

RangeError: Maximum call stack size exceeded
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:334:38)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79)
    at Union.readdirSync (/home/rrt/Software/nancy/node_modules/unionfs/lib/union.js:329:79) {
  prev: null
}

I presume the problem arises because fs is patched to use ufs, but that in turn is using fs? But the new fs should use ufs, while ufs should use the old fs? I guess that this sort of patching is quite fiddly and so there may be a gotcha here…

Thanks for fs-monkey!

rrthomas avatar May 25 '21 15:05 rrthomas

@rrthomas https://github.com/streamich/fs-monkey/issues/139#issuecomment-511059950 describes a solution that helped me get past this issue. Hope it helps you.

rahulbakale avatar Jun 12 '21 16:06 rahulbakale