summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorMyles Borins <mylesborins@google.com>2018-05-15 12:12:09 -0400
committerRuben Bridgewater <ruben@bridgewater.de>2018-05-18 16:07:36 +0200
commit3424f71cc900ce2bb22615630c37ba236a2060a4 (patch)
treeaeb4b80401d9771350e7d6002742c2f7266755b0 /deps
parent59f71ea4ddf081b55f50334158c25ea19808b3d6 (diff)
downloadandroid-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.h2
-rw-r--r--deps/v8/src/managed.h20
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);
}