init: call umount unconditionally
std::all_of is using std::find_if, which means, if any element the given
predicate returns false, it stops further iteration and just returns false.
std::all_of used in Reboot.cpp will cause umount not to be called on all
block devices if some block device returns false in the middle.
Bug: 68158923
Test: reboot
Change-Id: I43ba6bd0c18018c1ed5fe2b63996552bc51cc67c
diff --git a/init/reboot.cpp b/init/reboot.cpp
index b17dbaf..21086dc 100644
--- a/init/reboot.cpp
+++ b/init/reboot.cpp
@@ -280,16 +280,16 @@
}
bool unmount_done = true;
if (emulated_devices.size() > 0) {
- unmount_done = std::all_of(emulated_devices.begin(), emulated_devices.end(),
- [](auto& entry) { return entry.Umount(false); });
+ for (auto& entry : emulated_devices) {
+ if (!entry.Umount(false)) unmount_done = false;
+ }
if (unmount_done) {
sync();
}
}
- unmount_done =
- std::all_of(block_devices.begin(), block_devices.end(),
- [&timeout](auto& entry) { return entry.Umount(timeout == 0ms); }) &&
- unmount_done;
+ for (auto& entry : block_devices) {
+ if (!entry.Umount(timeout == 0ms)) unmount_done = false;
+ }
if (unmount_done) {
return UMOUNT_STAT_SUCCESS;
}