Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index cf84538d830120829bcee127a9e2be3a8998e0b0..34909c5ce1328dea09e4ebb1b3583afdd9334d8c 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -4432,55 +4432,29 @@ THREADED_TEST(WeakReference) { |
} |
-static bool in_scavenge = false; |
-static int last = -1; |
- |
-static void ForceScavenge(v8::Persistent<v8::Value> obj, void* data) { |
- CHECK_EQ(-1, last); |
- last = 0; |
+static void DisposeAndSetFlag(v8::Persistent<v8::Value> obj, void* data) { |
obj.Dispose(); |
obj.Clear(); |
- in_scavenge = true; |
- HEAP->PerformScavenge(); |
- in_scavenge = false; |
*(reinterpret_cast<bool*>(data)) = true; |
} |
-static void CheckIsNotInvokedInScavenge(v8::Persistent<v8::Value> obj, |
- void* data) { |
- CHECK_EQ(0, last); |
- last = 1; |
- *(reinterpret_cast<bool*>(data)) = in_scavenge; |
- obj.Dispose(); |
- obj.Clear(); |
-} |
-THREADED_TEST(NoWeakRefCallbacksInScavenge) { |
- // Test verifies that scavenge cannot invoke WeakReferenceCallbacks. |
- // Calling callbacks from scavenges is unsafe as objects held by those |
- // handlers might have become strongly reachable, but scavenge doesn't |
- // check that. |
+THREADED_TEST(IndependentWeakHandle) { |
v8::Persistent<Context> context = Context::New(); |
Context::Scope context_scope(context); |
v8::Persistent<v8::Object> object_a; |
- v8::Persistent<v8::Object> object_b; |
{ |
v8::HandleScope handle_scope; |
- object_b = v8::Persistent<v8::Object>::New(v8::Object::New()); |
object_a = v8::Persistent<v8::Object>::New(v8::Object::New()); |
} |
bool object_a_disposed = false; |
- object_a.MakeWeak(&object_a_disposed, &ForceScavenge); |
- bool released_in_scavenge = false; |
- object_b.MakeWeak(&released_in_scavenge, &CheckIsNotInvokedInScavenge); |
- |
- while (!object_a_disposed) { |
- HEAP->CollectAllGarbage(false); |
- } |
- CHECK(!released_in_scavenge); |
+ object_a.MakeWeak(&object_a_disposed, &DisposeAndSetFlag); |
+ object_a.MarkIndependent(); |
antonm
2011/05/16 14:13:19
please, add tests cases for weak callbacks forcing
Vyacheslav Egorov (Chromium)
2011/05/16 14:55:34
Done.
|
+ HEAP->PerformScavenge(); |
+ CHECK(object_a_disposed); |
} |