OLD | NEW |
---|---|
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1923 // skipped when scanning the heap. | 1923 // skipped when scanning the heap. |
1924 int old_linear_size = static_cast<int>(limit() - top()); | 1924 int old_linear_size = static_cast<int>(limit() - top()); |
1925 Free(top(), old_linear_size); | 1925 Free(top(), old_linear_size); |
1926 SetTop(NULL, NULL); | 1926 SetTop(NULL, NULL); |
1927 | 1927 |
1928 // Stop lazy sweeping and clear marking bits for unswept pages. | 1928 // Stop lazy sweeping and clear marking bits for unswept pages. |
1929 if (first_unswept_page_ != NULL) { | 1929 if (first_unswept_page_ != NULL) { |
1930 Page* last = last_unswept_page_->next_page(); | 1930 Page* last = last_unswept_page_->next_page(); |
1931 Page* p = first_unswept_page_; | 1931 Page* p = first_unswept_page_; |
1932 do { | 1932 do { |
1933 if (ShouldBeSweptLazily(p)) { | 1933 // Do not use ShouldBeSweptLazily predicate here. |
1934 ASSERT(!p->WasSwept()); | 1934 // New evacuation candidates were selected but they still have |
1935 // to be swept before collection starts. | |
1936 if (!p->WasSwept()) { | |
Vyacheslav Egorov (Chromium)
2011/09/22 15:30:11
The same regression test revealed a bug here.
We
| |
1935 Bitmap::Clear(p); | 1937 Bitmap::Clear(p); |
1936 if (FLAG_gc_verbose) { | 1938 if (FLAG_gc_verbose) { |
1937 PrintF("Sweeping 0x%" V8PRIxPTR " lazily abandoned.\n", | 1939 PrintF("Sweeping 0x%" V8PRIxPTR " lazily abandoned.\n", |
1938 reinterpret_cast<intptr_t>(p)); | 1940 reinterpret_cast<intptr_t>(p)); |
1939 } | 1941 } |
1940 } | 1942 } |
1941 p = p->next_page(); | 1943 p = p->next_page(); |
1942 } while (p != last); | 1944 } while (p != last); |
1943 } | 1945 } |
1944 first_unswept_page_ = last_unswept_page_ = Page::FromAddress(NULL); | 1946 first_unswept_page_ = last_unswept_page_ = Page::FromAddress(NULL); |
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2520 object->ShortPrint(); | 2522 object->ShortPrint(); |
2521 PrintF("\n"); | 2523 PrintF("\n"); |
2522 } | 2524 } |
2523 printf(" --------------------------------------\n"); | 2525 printf(" --------------------------------------\n"); |
2524 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 2526 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
2525 } | 2527 } |
2526 | 2528 |
2527 #endif // DEBUG | 2529 #endif // DEBUG |
2528 | 2530 |
2529 } } // namespace v8::internal | 2531 } } // namespace v8::internal |
OLD | NEW |