Make PopSirt inlinable, pass self to SirtRef.
Change-Id: Ieb91526b1cb1f8644ceb3c5b99649f658f43bbc1
diff --git a/src/image_writer.cc b/src/image_writer.cc
index e883599..33d37c7 100644
--- a/src/image_writer.cc
+++ b/src/image_writer.cc
@@ -36,6 +36,7 @@
#include "object_utils.h"
#include "runtime.h"
#include "scoped_thread_state_change.h"
+#include "sirt_ref.h"
#include "space.h"
#include "UniquePtr.h"
#include "utils.h"
@@ -320,7 +321,7 @@
DCHECK_EQ(obj, obj->AsString()->Intern());
return;
}
- SirtRef<String> interned(obj->AsString()->Intern());
+ SirtRef<String> interned(Thread::Current(), obj->AsString()->Intern());
if (obj != interned.get()) {
if (!image_writer->IsImageOffsetAssigned(interned.get())) {
// interned obj is after us, allocate its location early
@@ -351,8 +352,9 @@
}
// build an Object[] of the roots needed to restore the runtime
- SirtRef<ObjectArray<Object> > image_roots(
- ObjectArray<Object>::Alloc(object_array_class, ImageHeader::kImageRootsMax));
+ SirtRef<ObjectArray<Object> >
+ image_roots(Thread::Current(),
+ ObjectArray<Object>::Alloc(object_array_class, ImageHeader::kImageRootsMax));
image_roots->Set(ImageHeader::kJniStubArray, runtime->GetJniDlsymLookupStub());
image_roots->Set(ImageHeader::kAbstractMethodErrorStubArray,
runtime->GetAbstractMethodErrorStubArray());
@@ -380,7 +382,8 @@
}
void ImageWriter::CalculateNewObjectOffsets() {
- SirtRef<ObjectArray<Object> > image_roots(CreateImageRoots());
+ Thread* self = Thread::Current();
+ SirtRef<ObjectArray<Object> > image_roots(self, CreateImageRoots());
Heap* heap = Runtime::Current()->GetHeap();
const Spaces& spaces = heap->GetSpaces();
@@ -392,20 +395,20 @@
image_end_ += RoundUp(sizeof(ImageHeader), 8); // 64-bit-alignment
{
- ReaderMutexLock mu(*Locks::heap_bitmap_lock_);
+ ReaderMutexLock mu(self, *Locks::heap_bitmap_lock_);
heap->FlushAllocStack();
}
{
// TODO: Image spaces only?
// TODO: Add InOrderWalk to heap bitmap.
- const char* old = Thread::Current()->StartAssertNoThreadSuspension("ImageWriter");
+ const char* old = self->StartAssertNoThreadSuspension("ImageWriter");
DCHECK(heap->GetLargeObjectsSpace()->GetLiveObjects()->IsEmpty());
for (Spaces::const_iterator it = spaces.begin(); it != spaces.end(); ++it) {
(*it)->GetLiveBitmap()->InOrderWalk(CalculateNewObjectOffsetsCallback, this);
DCHECK_LT(image_end_, image_->Size());
}
- Thread::Current()->EndAssertNoThreadSuspension(old);
+ self->EndAssertNoThreadSuspension(old);
}
// Note that image_top_ is left at end of used space