summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFedor Indutny <fedor@indutny.com>2015-03-05 20:27:58 -0500
committerFedor Indutny <fedor@indutny.com>2015-03-06 11:02:01 -0500
commitc09c90c1a9e74ee4f29a051daf10bc4c5d5f7755 (patch)
treeb94ecca33f11d0713518d434f9575b8f70e99ab0 /src
parentdccb69a21afc759e8827a5293ee8648d3ba354b0 (diff)
downloadandroid-node-v8-c09c90c1a9e74ee4f29a051daf10bc4c5d5f7755.tar.gz
android-node-v8-c09c90c1a9e74ee4f29a051daf10bc4c5d5f7755.tar.bz2
android-node-v8-c09c90c1a9e74ee4f29a051daf10bc4c5d5f7755.zip
tls_wrap: do not hold persistent ref to parent
Hold non-persistent reference in JS, rather than in C++ to avoid cycles. PR-URL: https://github.com/iojs/io.js/pull/1078 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'src')
-rw-r--r--src/tls_wrap.cc16
-rw-r--r--src/tls_wrap.h5
2 files changed, 6 insertions, 15 deletions
diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc
index b05b8891d0..a42e5faa70 100644
--- a/src/tls_wrap.cc
+++ b/src/tls_wrap.cc
@@ -37,17 +37,14 @@ using v8::Value;
TLSWrap::TLSWrap(Environment* env,
Kind kind,
StreamBase* stream,
- Handle<Object> stream_obj,
- Handle<Object> sc)
- : SSLWrap<TLSWrap>(env, Unwrap<SecureContext>(sc), kind),
+ SecureContext* sc)
+ : SSLWrap<TLSWrap>(env, sc, kind),
StreamBase(env),
AsyncWrap(env,
env->tls_wrap_constructor_function()->NewInstance(),
AsyncWrap::PROVIDER_TLSWRAP),
- sc_(Unwrap<SecureContext>(sc)),
- sc_handle_(env->isolate(), sc),
+ sc_(sc),
stream_(stream),
- stream_handle_(env->isolate(), stream_obj),
enc_in_(nullptr),
enc_out_(nullptr),
clear_in_(nullptr),
@@ -84,9 +81,6 @@ TLSWrap::~TLSWrap() {
clear_in_ = nullptr;
sc_ = nullptr;
- sc_handle_.Reset();
- stream_handle_.Reset();
- persistent().Reset();
#ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
sni_context_.Reset();
@@ -196,9 +190,9 @@ void TLSWrap::Wrap(const FunctionCallbackInfo<Value>& args) {
});
CHECK_NE(stream, nullptr);
- TLSWrap* res = new TLSWrap(env, kind, stream, stream_obj, sc);
+ TLSWrap* res = new TLSWrap(env, kind, stream, Unwrap<SecureContext>(sc));
- args.GetReturnValue().Set(res->persistent());
+ args.GetReturnValue().Set(res->object());
}
diff --git a/src/tls_wrap.h b/src/tls_wrap.h
index 73a9f84ec0..9f095355bb 100644
--- a/src/tls_wrap.h
+++ b/src/tls_wrap.h
@@ -78,8 +78,7 @@ class TLSWrap : public crypto::SSLWrap<TLSWrap>,
TLSWrap(Environment* env,
Kind kind,
StreamBase* stream,
- v8::Handle<v8::Object> stream_obj,
- v8::Handle<v8::Object> sc);
+ crypto::SecureContext* sc);
static void SSLInfoCallback(const SSL* ssl_, int where, int ret);
void InitSSL();
@@ -141,9 +140,7 @@ class TLSWrap : public crypto::SSLWrap<TLSWrap>,
#endif // SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
crypto::SecureContext* sc_;
- v8::Persistent<v8::Object> sc_handle_;
StreamBase* stream_;
- v8::Persistent<v8::Object> stream_handle_;
BIO* enc_in_;
BIO* enc_out_;
NodeBIO* clear_in_;