Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(756)

Side by Side Diff: src/heap.cc

Issue 6312147: Fix some correctness issues with the store buffer shown up by... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/gc/
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/store-buffer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 4107 matching lines...) Expand 10 before | Expand all | Expand 10 after
4118 // newly promoted objects and fix the pointers before the promotion 4118 // newly promoted objects and fix the pointers before the promotion
4119 // queue gets to them. 4119 // queue gets to them.
4120 ASSERT(StoreBuffer::store_buffer_mode() != 4120 ASSERT(StoreBuffer::store_buffer_mode() !=
4121 StoreBuffer::kStoreBufferFunctional || 4121 StoreBuffer::kStoreBufferFunctional ||
4122 !Heap::InToSpace(object)); 4122 !Heap::InToSpace(object));
4123 if (Heap::InFromSpace(object)) { 4123 if (Heap::InFromSpace(object)) {
4124 callback(reinterpret_cast<HeapObject**>(slot), HeapObject::cast(object)); 4124 callback(reinterpret_cast<HeapObject**>(slot), HeapObject::cast(object));
4125 if (Heap::InNewSpace(*slot)) { 4125 if (Heap::InNewSpace(*slot)) {
4126 ASSERT(Heap::InToSpace(*slot)); 4126 ASSERT(Heap::InToSpace(*slot));
4127 ASSERT((*slot)->IsHeapObject()); 4127 ASSERT((*slot)->IsHeapObject());
4128 StoreBuffer::EnterDirectlyIntoStoreBuffer( 4128 ASSERT(StoreBuffer::CellIsInStoreBuffer(
4129 reinterpret_cast<Address>(slot)); 4129 reinterpret_cast<Address>(slot)));
4130 } 4130 }
4131 } 4131 }
4132 slot_address += kPointerSize; 4132 slot_address += kPointerSize;
4133 } 4133 }
4134 } 4134 }
4135 4135
4136 4136
4137 #ifdef DEBUG 4137 #ifdef DEBUG
4138 static void CheckStoreBuffer(Object** current, 4138 static void CheckStoreBuffer(Object** current,
4139 Object** limit, 4139 Object** limit,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
4224 // Page can contain garbage pointers there. 4224 // Page can contain garbage pointers there.
4225 Address end; 4225 Address end;
4226 4226
4227 if (watermark_state == WATERMARK_SHOULD_BE_VALID || 4227 if (watermark_state == WATERMARK_SHOULD_BE_VALID ||
4228 page->IsWatermarkValid()) { 4228 page->IsWatermarkValid()) {
4229 end = page->AllocationWatermark(); 4229 end = page->AllocationWatermark();
4230 } else { 4230 } else {
4231 end = page->CachedAllocationWatermark(); 4231 end = page->CachedAllocationWatermark();
4232 } 4232 }
4233 4233
4234
4235 Address map_aligned_current = page->ObjectAreaStart(); 4234 Address map_aligned_current = page->ObjectAreaStart();
4236 4235
4237 ASSERT(map_aligned_current == MapStartAlign(map_aligned_current)); 4236 ASSERT(map_aligned_current == MapStartAlign(map_aligned_current));
4238 ASSERT(end == MapEndAlign(end)); 4237 ASSERT(end == MapEndAlign(end));
4239 4238
4240 Object*** store_buffer_position = StoreBuffer::Start(); 4239 Object*** store_buffer_position = StoreBuffer::Start();
4241 Object*** store_buffer_top = StoreBuffer::Top(); 4240 Object*** store_buffer_top = StoreBuffer::Top();
4242 4241
4243 for ( ; map_aligned_current < end; map_aligned_current += Map::kSize) { 4242 for ( ; map_aligned_current < end; map_aligned_current += Map::kSize) {
4244 ASSERT(!Heap::InNewSpace(Memory::Object_at(map_aligned_current))); 4243 ASSERT(!Heap::InNewSpace(Memory::Object_at(map_aligned_current)));
(...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after
5510 void ExternalStringTable::TearDown() { 5509 void ExternalStringTable::TearDown() {
5511 new_space_strings_.Free(); 5510 new_space_strings_.Free();
5512 old_space_strings_.Free(); 5511 old_space_strings_.Free();
5513 } 5512 }
5514 5513
5515 5514
5516 List<Object*> ExternalStringTable::new_space_strings_; 5515 List<Object*> ExternalStringTable::new_space_strings_;
5517 List<Object*> ExternalStringTable::old_space_strings_; 5516 List<Object*> ExternalStringTable::old_space_strings_;
5518 5517
5519 } } // namespace v8::internal 5518 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/store-buffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698