From d25e5491eba81e3f3336b03883d4cc49a9273141 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Thu, 23 Feb 2023 18:17:23 +0100 Subject: [PATCH] Fixed V8 crash with Create App --- .../src/v8/ScriptValueIteratorV8Wrapper.h | 1 + libraries/script-engine/src/v8/V8Types.h | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.h b/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.h index 5912c3af85..46a0056ab6 100644 --- a/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.h +++ b/libraries/script-engine/src/v8/ScriptValueIteratorV8Wrapper.h @@ -31,6 +31,7 @@ public: void next(); V8ScriptValue value(); private: + // V8TODO: maybe these should be WeakPersistent? v8::UniquePersistent _propertyNames; v8::UniquePersistent _object; v8::UniquePersistent _context; diff --git a/libraries/script-engine/src/v8/V8Types.h b/libraries/script-engine/src/v8/V8Types.h index fa33f95605..952fbcefee 100644 --- a/libraries/script-engine/src/v8/V8Types.h +++ b/libraries/script-engine/src/v8/V8Types.h @@ -31,7 +31,8 @@ public: v8::Isolate::Scope isolateScope(_engine->getIsolate()); v8::HandleScope handleScope(_engine->getIsolate()); v8::Context::Scope(_engine->getContext()); - _value.reset(new v8::UniquePersistent(_engine->getIsolate(), value)); + _value.reset(new v8::Persistent(_engine->getIsolate(), value)); + //_value.reset(new v8::UniquePersistent(_engine->getIsolate(), value)); }; V8ScriptValueTemplate& operator= (const V8ScriptValueTemplate &source) { @@ -40,7 +41,8 @@ public: v8::HandleScope handleScope(_engine->getIsolate()); v8::Context::Scope(_engine->getContext()); _engine = source.getEngine(); - _value.reset(new v8::UniquePersistent(_engine->getIsolate(), source.constGet())); + _value.reset(new v8::Persistent(_engine->getIsolate(), source.constGet())); + //_value.reset(new v8::UniquePersistent(_engine->getIsolate(), source.constGet())); return *this; }; @@ -49,7 +51,8 @@ public: v8::Isolate::Scope isolateScope(_engine->getIsolate()); v8::HandleScope handleScope(_engine->getIsolate()); v8::Context::Scope(_engine->getContext()); - _value.reset(new v8::UniquePersistent(_engine->getIsolate(), v8::Local())); + //_value.reset(new v8::UniquePersistent(_engine->getIsolate(), v8::Local())); + _value.reset(new v8::Persistent(_engine->getIsolate(), v8::Local())); }; V8ScriptValueTemplate(const V8ScriptValueTemplate &copied) : _engine(copied.getEngine()) { @@ -57,7 +60,8 @@ public: v8::Isolate::Scope isolateScope(_engine->getIsolate()); v8::HandleScope handleScope(_engine->getIsolate()); v8::Context::Scope(_engine->getContext()); - _value.reset(new v8::UniquePersistent(_engine->getIsolate(), copied.constGet())); + //_value.reset(new v8::UniquePersistent(_engine->getIsolate(), copied.constGet())); + _value.reset(new v8::Persistent(_engine->getIsolate(), copied.constGet())); } v8::Local get() { @@ -104,7 +108,9 @@ public: }; private: - std::shared_ptr> _value; + // std::shared_ptr> _value; + // V8TODO: Persistent needs reset to release object? It may cause memory leaks here + std::shared_ptr> _value; // V8TODO: maybe make it weak // does it need , CopyablePersistentTraits? // V8TODO: is context needed at all?