resolve merge conflicts of 0b217a40e to master

Change-Id: I0b564c70ef4d538aa676ad5eabf5f9667e4c8b3d
diff --git a/storaged/main.cpp b/storaged/main.cpp
index 2f2273d..4d1e430 100644
--- a/storaged/main.cpp
+++ b/storaged/main.cpp
@@ -42,11 +42,11 @@
 #include <storaged_service.h>
 #include <storaged_utils.h>
 
-storaged_t storaged;
+sp<storaged_t> storaged;
 
 // Function of storaged's main thread
-void* storaged_main(void* s) {
-    storaged_t* storaged = (storaged_t*)s;
+void* storaged_main(void* /* unused */) {
+    storaged = new storaged_t();
 
     storaged->init_battery_service();
 
@@ -116,7 +116,7 @@
         report_storage_health();
         // Start the main thread of storaged
         pthread_t storaged_main_thread;
-        errno = pthread_create(&storaged_main_thread, NULL, storaged_main, &storaged);
+        errno = pthread_create(&storaged_main_thread, NULL, storaged_main, NULL);
         if (errno != 0) {
             PLOG_TO(SYSTEM, ERROR) << "Failed to create main thread";
             return -1;
diff --git a/storaged/storaged.cpp b/storaged/storaged.cpp
index aa3d1de..54d429c 100644
--- a/storaged/storaged.cpp
+++ b/storaged/storaged.cpp
@@ -23,6 +23,7 @@
 #include <android-base/logging.h>
 #include <batteryservice/BatteryServiceConstants.h>
 #include <batteryservice/IBatteryPropertiesRegistrar.h>
+#include <binder/IPCThreadState.h>
 #include <binder/IServiceManager.h>
 #include <cutils/properties.h>
 #include <log/log.h>
@@ -192,6 +193,7 @@
     if (battery_properties != NULL &&
         IInterface::asBinder(battery_properties) == who) {
         LOG_TO(SYSTEM, ERROR) << "batteryproperties service died, exiting";
+        IPCThreadState::self()->stopProcess();
         exit(1);
     } else {
         LOG_TO(SYSTEM, ERROR) << "unknown service died";
diff --git a/storaged/storaged_service.cpp b/storaged/storaged_service.cpp
index 33e85e3..b1d3bfd 100644
--- a/storaged/storaged_service.cpp
+++ b/storaged/storaged_service.cpp
@@ -33,7 +33,7 @@
 
 using namespace android::base;
 
-extern storaged_t storaged;
+extern sp<storaged_t> storaged;
 
 std::vector<struct uid_info> BpStoraged::dump_uids(const char* /*option*/) {
     Parcel data, reply;
@@ -74,7 +74,7 @@
 
 std::vector<struct uid_info> Storaged::dump_uids(const char* /* option */) {
     std::vector<struct uid_info> uids_v;
-    std::unordered_map<uint32_t, struct uid_info> uids_m = storaged.get_uids();
+    std::unordered_map<uint32_t, struct uid_info> uids_m = storaged->get_uids();
 
     for (const auto& it : uids_m) {
         uids_v.push_back(it.second);
@@ -127,7 +127,7 @@
 
     uint64_t last_ts = 0;
     const std::map<uint64_t, struct uid_records>& records =
-                storaged.get_uid_records(hours, threshold, force_report);
+                storaged->get_uid_records(hours, threshold, force_report);
     for (const auto& it : records) {
         if (last_ts != it.second.start_ts) {
             dprintf(fd, "%llu", (unsigned long long)it.second.start_ts);
@@ -150,7 +150,7 @@
     }
 
     if (time_window) {
-        storaged.update_uid_io_interval(time_window);
+        storaged->update_uid_io_interval(time_window);
     }
 
     return NO_ERROR;