};
Timeout.prototype.unref = function() {
- if (!this._handle) {
+ if (this._handle) {
+ this._handle.unref();
+ } else if (typeof(this._onTimeout) === 'function') {
var now = Timer.now();
if (!this._idleStart) this._idleStart = now;
var delay = this._idleStart + this._idleTimeout - now;
this._handle.start(delay, 0);
this._handle.domain = this.domain;
this._handle.unref();
- } else {
- this._handle.unref();
}
};
--- /dev/null
+// Copyright (c) 2014, StrongLoop Inc.
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+var common = require('../common');
+
+var Timer = process.binding('timer_wrap').Timer;
+Timer.now = function() { return ++Timer.now.ticks; };
+Timer.now.ticks = 0;
+
+var t = setInterval(function() {}, 1);
+var o = { _idleStart: 0, _idleTimeout: 1 };
+t.unref.call(o);
+
+setTimeout(clearInterval.bind(null, t), 2);