Index: test/cctest/wasm/test-managed.cc |
diff --git a/test/cctest/wasm/test-managed.cc b/test/cctest/wasm/test-managed.cc |
index 00b1c9bb579bbca86e24a57d4660adfe9ed6ac4a..510166c6b9df88b4772292607d1d17ff5448bfb8 100644 |
--- a/test/cctest/wasm/test-managed.cc |
+++ b/test/cctest/wasm/test-managed.cc |
@@ -6,7 +6,7 @@ |
#include <stdlib.h> |
#include <string.h> |
-#include "src/wasm/managed.h" |
+#include "src/managed.h" |
#include "test/cctest/cctest.h" |
#include "test/common/wasm/test-signatures.h" |
@@ -20,6 +20,9 @@ class DeleteRecorder { |
*deleted_ = false; |
} |
~DeleteRecorder() { *deleted_ = true; } |
+ static void Deleter(void* value) { |
+ delete reinterpret_cast<DeleteRecorder*>(value); |
+ } |
private: |
bool* deleted_; |
@@ -27,33 +30,48 @@ class DeleteRecorder { |
TEST(ManagedCollect) { |
Isolate* isolate = CcTest::InitIsolateOnce(); |
- bool deleted = false; |
- DeleteRecorder* d = new DeleteRecorder(&deleted); |
- |
+ bool deleted1 = false; |
+ bool deleted2 = false; |
+ DeleteRecorder* d1 = new DeleteRecorder(&deleted1); |
+ DeleteRecorder* d2 = new DeleteRecorder(&deleted2); |
+ Isolate::ManagedLifeline* list_node = |
+ isolate->RegisterForReleaseAtTeardown(d2, DeleteRecorder::Deleter); |
{ |
HandleScope scope(isolate); |
- auto handle = Managed<DeleteRecorder>::New(isolate, d); |
+ auto handle = Managed<DeleteRecorder>::New(isolate, d1); |
USE(handle); |
} |
CcTest::CollectAllAvailableGarbage(); |
- CHECK(deleted); |
+ CHECK(deleted1); |
+ CHECK(!deleted2); |
+ isolate->UnregisterFromReleaseAtTeardown(list_node); |
+ CHECK_NULL(list_node); |
+ delete d2; |
} |
-TEST(ManagedCollectNoDelete) { |
- Isolate* isolate = CcTest::InitIsolateOnce(); |
- bool deleted = false; |
- DeleteRecorder* d = new DeleteRecorder(&deleted); |
+TEST(DisposeCollect) { |
+ v8::Isolate::CreateParams create_params; |
+ create_params.array_buffer_allocator = |
+ CcTest::InitIsolateOnce()->array_buffer_allocator(); |
+ v8::Isolate* isolate = v8::Isolate::New(create_params); |
+ isolate->Enter(); |
+ Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
+ bool deleted1 = false; |
+ bool deleted2 = false; |
+ DeleteRecorder* d1 = new DeleteRecorder(&deleted1); |
+ DeleteRecorder* d2 = new DeleteRecorder(&deleted2); |
{ |
- HandleScope scope(isolate); |
- auto handle = Managed<DeleteRecorder>::New(isolate, d, false); |
+ HandleScope scope(i_isolate); |
+ auto handle = Managed<DeleteRecorder>::New(i_isolate, d1); |
USE(handle); |
} |
+ i_isolate->RegisterForReleaseAtTeardown(d2, DeleteRecorder::Deleter); |
- CcTest::CollectAllAvailableGarbage(); |
- |
- CHECK(!deleted); |
- delete d; |
+ isolate->Exit(); |
+ isolate->Dispose(); |
+ CHECK(deleted1); |
+ CHECK(deleted2); |
} |