| Index: src/isolate.h
|
| diff --git a/src/isolate.h b/src/isolate.h
|
| index 489bf2c9df77536df1be12f67e2255fda952e044..d22659dc5f12119de942828aabab2a3c0e2a3592 100644
|
| --- a/src/isolate.h
|
| +++ b/src/isolate.h
|
| @@ -531,6 +531,8 @@ class Isolate {
|
| // for legacy API reasons.
|
| void TearDown();
|
|
|
| + void ReleaseManagedLifelines();
|
| +
|
| static void GlobalTearDown();
|
|
|
| void ClearSerializerData();
|
| @@ -1208,6 +1210,39 @@ class Isolate {
|
| void set_allow_atomics_wait(bool set) { allow_atomics_wait_ = set; }
|
| bool allow_atomics_wait() { return allow_atomics_wait_; }
|
|
|
| + // List of native heap values allocated by the runtime as part of its
|
| + // implementation
|
| + // that must be freed at isolate deinit.
|
| + class ManagedLifeline final {
|
| + public:
|
| + typedef void (*Deleter)(void*);
|
| + void Dispose() { deleter_(value_); }
|
| +
|
| + private:
|
| + friend class Isolate;
|
| +
|
| + ManagedLifeline() {
|
| + DCHECK_EQ(reinterpret_cast<void*>(this),
|
| + reinterpret_cast<void*>(&value_));
|
| + }
|
| +
|
| + // value_ must be the first member
|
| + void* value_ = nullptr;
|
| + Deleter deleter_ = nullptr;
|
| + ManagedLifeline* prev_ = nullptr;
|
| + ManagedLifeline* next_ = nullptr;
|
| + };
|
| +
|
| + // Register a native value for destruction at isolate teardown.
|
| + ManagedLifeline* RegisterForReleaseAtTeardown(
|
| + void* value, ManagedLifeline::Deleter deleter);
|
| +
|
| + // Unregister a previously registered value from release at
|
| + // isolate teardown, deleting the ManagedLifeline.
|
| + // This transfers the responsibility of the previously managed value's
|
| + // deletion to the caller.
|
| + void UnregisterFromReleaseAtTeardown(ManagedLifeline*& lifeline);
|
| +
|
| protected:
|
| explicit Isolate(bool enable_serializer);
|
| bool IsArrayOrObjectPrototype(Object* object);
|
| @@ -1489,6 +1524,8 @@ class Isolate {
|
|
|
| bool allow_atomics_wait_;
|
|
|
| + ManagedLifeline managed_lifelines_root_;
|
| +
|
| size_t total_regexp_code_generated_;
|
|
|
| friend class ExecutionAccess;
|
|
|