Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Print warning when maxTickDepth is reached

  • Loading branch information...
commit 8546d18d46573b49a93ece421a34abc90ecc22ae 1 parent 78dbb15
@isaacs isaacs authored
View
15 src/node.js
@@ -280,8 +280,18 @@
}
}
- process._tickCallback = function(fromSpinner) {
+ function maxTickWarn() {
+ // XXX Remove all this maxTickDepth stuff in 0.11
+ var msg = '(node) warning: Recursive process.nextTick detected. ' +
+ 'This will break in the next version of node. ' +
+ 'Please use setImmediate for recursive deferral.';
+ if (process.traceDeprecation)
+ console.trace(msg);
+ else
+ console.error(msg);
+ }
+ process._tickCallback = function(fromSpinner) {
// if you add a nextTick in a domain's error handler, then
// it's possible to cycle indefinitely. Normally, the tickDone
// in the finally{} block below will prevent this, however if
@@ -348,6 +358,9 @@
// it won't get fired anyway.
if (process._exiting) return;
+ if (tickDepth >= process.maxTickDepth)
+ maxTickWarn();
+
var tock = { callback: callback };
if (process.domain) tock.domain = process.domain;
nextTickQueue.push(tock);
View
30 test/message/max_tick_depth.js
@@ -0,0 +1,30 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var common = require('../common');
+
+process.maxTickDepth = 10;
+var i = 20;
+process.nextTick(function f() {
+ console.error('tick %d', i);
+ if (i-- > 0)
+ process.nextTick(f);
+});
View
23 test/message/max_tick_depth.out
@@ -0,0 +1,23 @@
+tick 20
+tick 19
+tick 18
+tick 17
+tick 16
+tick 15
+tick 14
+tick 13
+tick 12
+(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
+tick 11
+tick 10
+tick 9
+tick 8
+tick 7
+tick 6
+tick 5
+tick 4
+tick 3
+tick 2
+(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
+tick 1
+tick 0
View
31 test/message/max_tick_depth_trace.js
@@ -0,0 +1,31 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var common = require('../common');
+
+process.maxTickDepth = 10;
+process.traceDeprecation = true;
+var i = 20;
+process.nextTick(function f() {
+ console.error('tick %d', i);
+ if (i-- > 0)
+ process.nextTick(f);
+});
View
31 test/message/max_tick_depth_trace.out
@@ -0,0 +1,31 @@
+tick 20
+tick 19
+tick 18
+tick 17
+tick 16
+tick 15
+tick 14
+tick 13
+tick 12
+Trace: (node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
+ at maxTickWarn (node.js:289:17)
+ at process.nextTick (node.js:362:9)
+ at f (*test*message*max_tick_depth_trace.js:30:13)
+ at process._tickCallback (node.js:335:13)
+tick 11
+tick 10
+tick 9
+tick 8
+tick 7
+tick 6
+tick 5
+tick 4
+tick 3
+tick 2
+Trace: (node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
+ at maxTickWarn (node.js:289:17)
+ at process.nextTick (node.js:362:9)
+ at f (*test*message*max_tick_depth_trace.js:30:13)
+ at process._tickCallback (node.js:335:13)
+tick 1
+tick 0
Please sign in to comment.
Something went wrong with that request. Please try again.