timers: fix assertion in Timeout.unref()
authorBen Noordhuis <info@bnoordhuis.nl>
Fri, 17 Aug 2012 12:11:33 +0000 (14:11 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Fri, 17 Aug 2012 12:11:35 +0000 (14:11 +0200)
Ensure that the delay >= 0 when detaching the timer from the queue. Fixes the
following assertion:

  uv_timer_start: Assertion `timeout >= 0' failed.

No test included, it's timing sensitive.

lib/timers.js

index 897b64f..d281ea4 100644 (file)
@@ -253,10 +253,12 @@ var Timeout = function(after) {
 
 Timeout.prototype.unref = function() {
   if (!this._handle) {
+    var delay = this._when - Date.now();
+    if (delay < 0) delay = 0;
     exports.unenroll(this);
     this._handle = new Timer();
     this._handle.ontimeout = this._onTimeout;
-    this._handle.start(this._when - Date.now(), 0);
+    this._handle.start(delay, 0);
     this._handle.domain = this.domain;
     this._handle.unref();
   } else {