diff options
author | Myles Borins <mylesborins@google.com> | 2018-05-15 12:12:09 -0400 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2018-05-18 16:07:36 +0200 |
commit | 3424f71cc900ce2bb22615630c37ba236a2060a4 (patch) | |
tree | aeb4b80401d9771350e7d6002742c2f7266755b0 /deps | |
parent | 59f71ea4ddf081b55f50334158c25ea19808b3d6 (diff) | |
download | android-node-v8-3424f71cc900ce2bb22615630c37ba236a2060a4.tar.gz android-node-v8-3424f71cc900ce2bb22615630c37ba236a2060a4.tar.bz2 android-node-v8-3424f71cc900ce2bb22615630c37ba236a2060a4.zip |
deps: patch V8 to 6.6.346.32
PR-URL: https://github.com/nodejs/node/pull/20748
Refs: https://github.com/v8/v8/compare/6.6.346.31...6.6.346.32
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/include/v8-version.h | 2 | ||||
-rw-r--r-- | deps/v8/src/managed.h | 20 |
2 files changed, 15 insertions, 7 deletions
diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index dac19fa621..cdb2c5381e 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 6 #define V8_MINOR_VERSION 6 #define V8_BUILD_NUMBER 346 -#define V8_PATCH_LEVEL 31 +#define V8_PATCH_LEVEL 32 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/src/managed.h b/deps/v8/src/managed.h index 63fefdd480..d0ccb4e739 100644 --- a/deps/v8/src/managed.h +++ b/deps/v8/src/managed.h @@ -59,22 +59,30 @@ class Managed : public Foreign { isolate->factory()->NewForeign(reinterpret_cast<Address>(finalizer))); Handle<Object> global_handle = isolate->global_handles()->Create(*handle); finalizer->global_handle_location = global_handle.location(); - GlobalHandles::MakeWeak(finalizer->global_handle_location, - handle->GetFinalizer(), &Managed<CppType>::GCDelete, - v8::WeakCallbackType::kParameter); + GlobalHandles::MakeWeak( + finalizer->global_handle_location, handle->GetFinalizer(), + &ResetWeakAndScheduleGCDelete, v8::WeakCallbackType::kParameter); return handle; } private: - static void GCDelete(const v8::WeakCallbackInfo<void>& data) { + static void ResetWeakAndScheduleGCDelete( + const v8::WeakCallbackInfo<void>& data) { FinalizerWithHandle* finalizer = reinterpret_cast<FinalizerWithHandle*>(data.GetParameter()); - + GlobalHandles::Destroy(finalizer->global_handle_location); Isolate* isolate = reinterpret_cast<Isolate*>(data.GetIsolate()); isolate->UnregisterFromReleaseAtTeardown(finalizer); + // We need to call GCDelete as a second pass callback because + // it can trigger garbage collection. The first pass callbacks + // are not allowed to invoke V8 API. + data.SetSecondPassCallback(&GCDelete); + } - GlobalHandles::Destroy(finalizer->global_handle_location); + static void GCDelete(const v8::WeakCallbackInfo<void>& data) { + FinalizerWithHandle* finalizer = + reinterpret_cast<FinalizerWithHandle*>(data.GetParameter()); NativeDelete(finalizer); } |