Chromium Code Reviews| Index: test/cctest/test-weakmaps.cc |
| diff --git a/test/cctest/test-weakmaps.cc b/test/cctest/test-weakmaps.cc |
| index 2f28cb6c111d71bf487c8cb8c1dba401db7e987a..72116d43ca8d700685451d05e4e0da504bcbddea 100644 |
| --- a/test/cctest/test-weakmaps.cc |
| +++ b/test/cctest/test-weakmaps.cc |
| @@ -255,3 +255,28 @@ TEST(Regress2060b) { |
| heap->CollectAllGarbage(Heap::kNoGCFlags); |
| heap->CollectAllGarbage(Heap::kNoGCFlags); |
| } |
| + |
| + |
| +TEST(Regress399527) { |
| + CcTest::InitializeVM(); |
| + v8::HandleScope scope(CcTest::isolate()); |
| + Isolate* isolate = CcTest::i_isolate(); |
| + Heap* heap = isolate->heap(); |
| + |
| + { |
| + HandleScope scope(isolate); |
| + Handle<JSWeakMap> weak_map = AllocateJSWeakMap(isolate); |
| + IncrementalMarking* marking = heap->incremental_marking(); |
| + if (marking->IsStopped()) { |
|
Michael Starzinger
2014/08/04 15:15:37
Please use SimulateIncrementalMarking instead of t
Hannes Payer (out of office)
2014/08/04 15:31:44
Done.
|
| + marking->Start(); |
| + } |
| + |
| + while (!Marking::IsBlack(Marking::MarkBitFrom(*weak_map))) { |
| + marking->Step(MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD); |
| + } |
| + } |
| + // The weak map is marked black here but leaving the handle scope will make |
| + // the object unreachable. Aborting incremental marking will clear all the |
| + // marking bits which makes the weak map garbage. |
| + heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); |
| +} |