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
This commit is contained in:
Felix Geisendörfer
2011-02-21 15:46:34 +01:00
committed by Ryan Dahl
parent a2f498a5ef
commit 66601f13d9
2 changed files with 19 additions and 1 deletions

View File

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

View File

@@ -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');
});