Skip to content

Commit

Permalink
module: prevent race condition while combining import and require
Browse files Browse the repository at this point in the history
This checks if any require calls have happened to the same file
during the file read. If that was the case, it'll return the same
module instead of creating a new instance.

PR-URL: #27674
Reviewed-By: Guy Bedford <guybedford@gmail.com>
  • Loading branch information
BridgeAR authored and targos committed Jun 18, 2019
1 parent 5ee6ecd commit 9b248e3
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/internal/modules/esm/translators.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ translators.set('json', async function jsonStrategy(url) {
});
}
const content = await readFileAsync(pathname, 'utf-8');
// A require call could have been called on the same file during loading and
// that resolves synchronously. To make sure we always return the identical
// export, we have to check again if the module already exists or not.
module = CJSModule._cache[modulePath];
if (module && module.loaded) {
const exports = module.exports;
return createDynamicModule(['default'], url, (reflect) => {
reflect.exports.default.set(exports);
});
}
try {
const exports = JsonParse(stripBOM(content));
module = {
Expand Down

0 comments on commit 9b248e3

Please sign in to comment.