Browse Source

Do not cache modules that throw exceptions

If a module throws an exception on load, it should not be cached.
This patch shows the problem in a test case and also fixes it.

See: https://groups.google.com/forum/#!topic/nodejs-dev/1cIrvJcADbY

Closes GH-707
Closes GH-710
v0.7.4-release
Felix Geisendörfer 14 years ago
committed by Ryan Dahl
parent
commit
66601f13d9
  1. 8
      lib/module.js
  2. 12
      test/simple/test-require-exceptions.js

8
lib/module.js

@ -270,7 +270,13 @@ Module._load = function(request, parent, isMain) {
} }
Module._cache[filename] = module; Module._cache[filename] = module;
module.load(filename); try {
module.load(filename);
} catch (err) {
delete Module._cache[filename];
throw err;
}
return module.exports; return module.exports;
}; };

12
test/simple/test-require-exceptions.js

@ -0,0 +1,12 @@
var common = require('../common');
var assert = require('assert');
// A module with an error in it should throw
assert.throws(function() {
require(common.fixturesDir + '/throws_error');
});
// Requiring the same module again should throw as well
assert.throws(function() {
require(common.fixturesDir + '/throws_error');
});
Loading…
Cancel
Save