Fail in the right place when we cannot allocate a mark stack.
Previously we'd keep going and then crash when dereferencing
the mark stack later. I expected dalvikvm to throw an OutOfMemoryError
in this scenario but it also aborts.
Change-Id: I3cd995113561f40b191fcb51ecfcb1f032bed4ec
diff --git a/src/mark_stack.cc b/src/mark_stack.cc
index 34bad7d..a35fa2d 100644
--- a/src/mark_stack.cc
+++ b/src/mark_stack.cc
@@ -12,20 +12,14 @@
MarkStack* MarkStack::Create() {
UniquePtr<MarkStack> mark_stack(new MarkStack);
- bool success = mark_stack->Init();
- if (!success) {
- return NULL;
- } else {
- return mark_stack.release();
- }
+ mark_stack->Init();
+ return mark_stack.release();
}
-bool MarkStack::Init() {
+void MarkStack::Init() {
size_t length = 64 * MB;
mem_map_.reset(MemMap::Map("dalvik-mark-stack", NULL, length, PROT_READ | PROT_WRITE));
- if (mem_map_.get() == NULL) {
- return false;
- }
+ CHECK(mem_map_.get() != NULL) << "MemMap::Map() failed; aborting";
byte* addr = mem_map_->GetAddress();
base_ = reinterpret_cast<const Object**>(addr);
limit_ = reinterpret_cast<const Object**>(addr + length);
@@ -34,7 +28,6 @@
if (result == -1) {
PLOG(WARNING) << "madvise failed";
}
- return true;
}
MarkStack::~MarkStack() {}