tls_wrap: proxy handle methods in prototype
authorFedor Indutny <fedor@indutny.com>
Mon, 9 Mar 2015 14:50:29 +0000 (10:50 -0400)
committerFedor Indutny <fedor@indutny.com>
Mon, 9 Mar 2015 18:48:21 +0000 (14:48 -0400)
Set proxied methods wrappers in `TLSWrap` prototype instead of doing it
on every socket allocation. Should speed up things a bit and will
certainly make heapsnapshot less verbose.

PR-URL: https://github.com/iojs/io.js/pull/1108
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
lib/_tls_wrap.js
src/tls_wrap.cc

index 2fd13ef..fcc216b 100644 (file)
@@ -271,6 +271,14 @@ var proxiedMethods = [
   'setPendingInstances'
 ];
 
+// Proxy HandleWrap, PipeWrap and TCPWrap methods
+proxiedMethods.forEach(function(name) {
+  tls_wrap.TLSWrap.prototype[name] = function methodProxy() {
+    if (this._parent[name])
+      return this._parent[name].apply(this._parent, arguments);
+  };
+});
+
 TLSSocket.prototype._wrapHandle = function(handle) {
   var res;
 
@@ -297,14 +305,6 @@ TLSSocket.prototype._wrapHandle = function(handle) {
     }
   });
 
-  // Proxy HandleWrap, PipeWrap and TCPWrap methods
-  proxiedMethods.forEach(function(name) {
-    res[name] = function methodProxy() {
-      if (handle[name])
-        return handle[name].apply(handle, arguments);
-    };
-  });
-
   return res;
 };
 
index 8ecf33a..49523bc 100644 (file)
@@ -809,8 +809,8 @@ int TLSWrap::SelectSNIContextCallback(SSL* s, int* ad, void* arg) {
 
 
 void TLSWrap::Initialize(Handle<Object> target,
-                              Handle<Value> unused,
-                              Handle<Context> context) {
+                         Handle<Value> unused,
+                         Handle<Context> context) {
   Environment* env = Environment::GetCurrent(context);
 
   env->SetMethod(target, "wrap", TLSWrap::Wrap);
@@ -835,6 +835,9 @@ void TLSWrap::Initialize(Handle<Object> target,
 
   env->set_tls_wrap_constructor_template(t);
   env->set_tls_wrap_constructor_function(t->GetFunction());
+
+  target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "TLSWrap"),
+              t->GetFunction());
 }
 
 }  // namespace node