From 395471cd56790896abe4e6a2e19a9c32d617057b Mon Sep 17 00:00:00 2001 From: "Kevin (Kun) Kassimo Qian" Date: Fri, 12 Apr 2019 14:32:41 -0700 Subject: [PATCH] Make lsan happy --- .travis.yml | 2 +- core/libdeno/api.cc | 5 +++++ core/libdeno/binding.cc | 5 +++++ core/libdeno/internal.h | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8f23f11bae47ab..97958fe75ecfc0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -132,5 +132,5 @@ jobs: - third_party/depot_tools/gn gen target/debug - export ASAN_OPTIONS=detect_leaks=1 - ./tools/build.py test_cc - - ./target/debug/test_cc + - ./target/debug/test_cc --expose-gc diff --git a/core/libdeno/api.cc b/core/libdeno/api.cc index ad9c2a57417af1..67bd072b804459 100644 --- a/core/libdeno/api.cc +++ b/core/libdeno/api.cc @@ -71,6 +71,11 @@ Deno* deno_new(deno_config config) { deno::InitializeContext(isolate, context); } d->context_.Reset(isolate, context); + + d->gc_observer_private_symbol_.Reset( + isolate, + v8::Private::New(isolate, v8::String::NewFromUtf8( + isolate, "deno:gc_observer:symbol"))); } return reinterpret_cast(d); diff --git a/core/libdeno/binding.cc b/core/libdeno/binding.cc index 54cbe546893e9a..9e5935cc4f7ccf 100644 --- a/core/libdeno/binding.cc +++ b/core/libdeno/binding.cc @@ -208,12 +208,17 @@ void SetGCObserver(const v8::FunctionCallbackInfo& args) { v8::Isolate::Scope isolate_scope(isolate); v8::EscapableHandleScope handle_scope(isolate); + DenoIsolate* d = DenoIsolate::FromIsolate(isolate); + auto context = d->context_.Get(isolate); auto obj = args[0].As(); auto callback = args[1].As(); auto observer = new GCObserver(); observer->Register(isolate, obj); observer->SetCallback(isolate, callback); + // Make LSAN happy + obj->SetPrivate(context, d->gc_observer_private_symbol_.Get(isolate), + v8::External::New(isolate, observer)); handle_scope.Escape(obj); args.GetReturnValue().Set(obj); diff --git a/core/libdeno/internal.h b/core/libdeno/internal.h index 4982f9d2a9f6a8..87636fda6ca620 100644 --- a/core/libdeno/internal.h +++ b/core/libdeno/internal.h @@ -113,6 +113,7 @@ class DenoIsolate { deno_resolve_cb resolve_cb_; v8::Persistent context_; + v8::Persistent gc_observer_private_symbol_; std::map> zero_copy_map_; std::map> pending_promise_map_; std::string last_exception_;