Fix app image memory leak
There was a memory leak if we failed to add an image space, this
was caused by releasing ownership without adding it to the heap.
Bug: 22858531
(cherry picked from commit bd064ea2269b23360e32e8139c22d5993ddc385b)
Change-Id: Ib45c0140b82cee5da04ed4a9f101f7c554cb25da
diff --git a/runtime/oat_file_manager.cc b/runtime/oat_file_manager.cc
index e76e443..18cf81a 100644
--- a/runtime/oat_file_manager.cc
+++ b/runtime/oat_file_manager.cc
@@ -387,12 +387,16 @@
runtime->GetHeap()->AddSpace(image_space.get());
}
added_image_space = true;
- if (!runtime->GetClassLinker()->AddImageSpace(image_space.get(),
- h_loader,
- dex_elements,
- dex_location,
- /*out*/&dex_files,
- /*out*/&temp_error_msg)) {
+ if (runtime->GetClassLinker()->AddImageSpace(image_space.get(),
+ h_loader,
+ dex_elements,
+ dex_location,
+ /*out*/&dex_files,
+ /*out*/&temp_error_msg)) {
+ // Successfully added image space to heap, release the map so that it does not get
+ // freed.
+ image_space.release();
+ } else {
LOG(INFO) << "Failed to add image file " << temp_error_msg;
dex_files.clear();
{
@@ -406,7 +410,6 @@
added_image_space = false;
// Non-fatal, don't update error_msg.
}
- image_space.release();
}
}
}