tls: use parent handle's close callback
authorFedor Indutny <fedor@indutny.com>
Mon, 21 Sep 2015 23:22:26 +0000 (19:22 -0400)
committerJames M Snell <jasnell@gmail.com>
Mon, 12 Oct 2015 17:32:14 +0000 (10:32 -0700)
When closing the child TLSWrap handle - wait for the proper parent's
handle close callback invocation. `uv_close_cb` may be invoked much
later than the next libuv tick, depending on the platform.

The only platform that currently seem to defer `uv_close_cb` is Windows
XP. This behavior was not observed on other Windows systems, and is not
possible on Unixes.

Fix: https://github.com/nodejs/node/issues/2979
PR-URL: https://github.com/nodejs/node/pull/2991
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
lib/_tls_wrap.js

index 1bff757..ae88bf6 100644 (file)
@@ -296,7 +296,7 @@ proxiedMethods.forEach(function(name) {
 
 tls_wrap.TLSWrap.prototype.close = function closeProxy(cb) {
   if (this._parentWrap && this._parentWrap._handle === this._parent) {
-    setImmediate(cb);
+    this._parentWrap.once('close', cb);
     return this._parentWrap.destroy();
   }
   return this._parent.close(cb);