Merge "Skip unnecessary sleep during shutdown"

am: e3e4ec7c97

Change-Id: Iaa8af758ebcb2c7a300dde32902d14a11b6c53d6
This commit is contained in:
Wei Wang 2017-08-17 01:54:18 +00:00 committed by android-build-merger
commit 57f94aa4bc

View file

@ -267,8 +267,6 @@ static void DumpUmountDebuggingInfo(bool dump_all) {
static UmountStat UmountPartitions(std::chrono::milliseconds timeout) { static UmountStat UmountPartitions(std::chrono::milliseconds timeout) {
Timer t; Timer t;
UmountStat stat = UMOUNT_STAT_TIMEOUT;
int retry = 0;
/* data partition needs all pending writes to be completed and all emulated partitions /* data partition needs all pending writes to be completed and all emulated partitions
* umounted.If the current waiting is not good enough, give * umounted.If the current waiting is not good enough, give
* up and leave it to e2fsck after reboot to fix it. * up and leave it to e2fsck after reboot to fix it.
@ -280,25 +278,27 @@ static UmountStat UmountPartitions(std::chrono::milliseconds timeout) {
return UMOUNT_STAT_ERROR; return UMOUNT_STAT_ERROR;
} }
if (block_devices.size() == 0) { if (block_devices.size() == 0) {
stat = UMOUNT_STAT_SUCCESS; return UMOUNT_STAT_SUCCESS;
break;
} }
if ((timeout < t.duration()) && retry > 0) { // try umount at least once bool unmount_done = true;
stat = UMOUNT_STAT_TIMEOUT; if (emulated_devices.size() > 0) {
break; unmount_done = std::all_of(emulated_devices.begin(), emulated_devices.end(),
[](auto& entry) { return entry.Umount(); });
if (unmount_done) {
sync();
}
} }
if (emulated_devices.size() > 0 && unmount_done = std::all_of(block_devices.begin(), block_devices.end(),
std::all_of(emulated_devices.begin(), emulated_devices.end(), [](auto& entry) { return entry.Umount(); }) &&
[](auto& entry) { return entry.Umount(); })) { unmount_done;
sync(); if (unmount_done) {
return UMOUNT_STAT_SUCCESS;
} }
for (auto& entry : block_devices) { if ((timeout < t.duration())) { // try umount at least once
entry.Umount(); return UMOUNT_STAT_TIMEOUT;
} }
retry++;
std::this_thread::sleep_for(100ms); std::this_thread::sleep_for(100ms);
} }
return stat;
} }
static void KillAllProcesses() { android::base::WriteStringToFile("i", "/proc/sysrq-trigger"); } static void KillAllProcesses() { android::base::WriteStringToFile("i", "/proc/sysrq-trigger"); }