| Index: src/spaces.h
|
| diff --git a/src/spaces.h b/src/spaces.h
|
| index a3cc737784f1947ba430d6b17e39b989349bc241..efed18ec6d4778c26ef7bd1fd1067e68230b43ff 100644
|
| --- a/src/spaces.h
|
| +++ b/src/spaces.h
|
| @@ -312,11 +312,20 @@ class MemoryChunk {
|
| }
|
|
|
| Space* owner() const {
|
| - return owner_;
|
| + if ((reinterpret_cast<intptr_t>(owner_) & kFailureTagMask) ==
|
| + kFailureTag) {
|
| + return reinterpret_cast<Space*>(reinterpret_cast<intptr_t>(owner_) -
|
| + kFailureTag);
|
| + } else {
|
| + return NULL;
|
| + }
|
| }
|
|
|
| void set_owner(Space* space) {
|
| - owner_ = space;
|
| + ASSERT((reinterpret_cast<intptr_t>(space) & kFailureTagMask) == 0);
|
| + owner_ = reinterpret_cast<Address>(space) + kFailureTag;
|
| + ASSERT((reinterpret_cast<intptr_t>(owner_) & kFailureTagMask) ==
|
| + kFailureTag);
|
| }
|
|
|
| base::VirtualMemory* reserved_memory() {
|
| @@ -682,7 +691,10 @@ class MemoryChunk {
|
|
|
| // If the chunk needs to remember its memory reservation, it is stored here.
|
| base::VirtualMemory reservation_;
|
| - Space* owner_;
|
| + // The identity of the owning space. This is tagged as a failure pointer, but
|
| + // no failure can be in an object, so this can be distinguished from any entry
|
| + // in a fixed array.
|
| + Address owner_;
|
| Heap* heap_;
|
| // Used by the store buffer to keep track of which pages to mark scan-on-
|
| // scavenge.
|
|
|