Permalink
Browse files

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
  • Loading branch information...
1 parent a2f498a commit 66601f13d9f841fe4e644a0b106ea3106054f46a @felixge felixge committed with ry Feb 21, 2011
Showing with 19 additions and 1 deletion.
  1. +7 −1 lib/module.js
  2. +12 −0 test/simple/test-require-exceptions.js
View
@@ -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;
};
@@ -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');
+});

0 comments on commit 66601f1

Please sign in to comment.