Chromium Code Reviews| 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); |
| } |