From 56292ef1198fbeb6a12c27c7b4f42e89c933e049 Mon Sep 17 00:00:00 2001 From: Paul Crowley Date: Fri, 20 Oct 2017 08:07:53 -0700 Subject: [PATCH] Undo Utils dependency on VolumeManager I want to use Utils in another executable, so breaking this link. Bug: 25861755 Test: compiles (and boots, though that doesn't exercise changed code) Change-Id: I6bb447453bb370fefb7f2f3aceb459428bdee6a7 --- Utils.cpp | 20 +++++++++++--------- Utils.h | 3 +++ VolumeManager.cpp | 6 ++---- VolumeManager.h | 4 ---- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Utils.cpp b/Utils.cpp index 9c19190..1f6ff21 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -14,10 +14,10 @@ * limitations under the License. */ -#include "sehandle.h" #include "Utils.h" + #include "Process.h" -#include "VolumeManager.h" +#include "sehandle.h" #include #include @@ -55,6 +55,8 @@ security_context_t sBlkidUntrustedContext = nullptr; security_context_t sFsckContext = nullptr; security_context_t sFsckUntrustedContext = nullptr; +bool sSleepOnUnmount = true; + static const char* kBlkidPath = "/system/bin/blkid"; static const char* kKeyPath = "/data/misc/vold"; @@ -134,22 +136,22 @@ status_t ForceUnmount(const std::string& path) { } // Apps might still be handling eject request, so wait before // we start sending signals - if (!VolumeManager::shutting_down) sleep(5); + if (sSleepOnUnmount) sleep(5); KillProcessesWithOpenFiles(path, SIGINT); - if (!VolumeManager::shutting_down) sleep(5); + if (sSleepOnUnmount) sleep(5); if (!umount2(cpath, UMOUNT_NOFOLLOW) || errno == EINVAL || errno == ENOENT) { return OK; } KillProcessesWithOpenFiles(path, SIGTERM); - if (!VolumeManager::shutting_down) sleep(5); + if (sSleepOnUnmount) sleep(5); if (!umount2(cpath, UMOUNT_NOFOLLOW) || errno == EINVAL || errno == ENOENT) { return OK; } KillProcessesWithOpenFiles(path, SIGKILL); - if (!VolumeManager::shutting_down) sleep(5); + if (sSleepOnUnmount) sleep(5); if (!umount2(cpath, UMOUNT_NOFOLLOW) || errno == EINVAL || errno == ENOENT) { return OK; } @@ -161,17 +163,17 @@ status_t KillProcessesUsingPath(const std::string& path) { if (KillProcessesWithOpenFiles(path, SIGINT) == 0) { return OK; } - if (!VolumeManager::shutting_down) sleep(5); + if (sSleepOnUnmount) sleep(5); if (KillProcessesWithOpenFiles(path, SIGTERM) == 0) { return OK; } - if (!VolumeManager::shutting_down) sleep(5); + if (sSleepOnUnmount) sleep(5); if (KillProcessesWithOpenFiles(path, SIGKILL) == 0) { return OK; } - if (!VolumeManager::shutting_down) sleep(5); + if (sSleepOnUnmount) sleep(5); // Send SIGKILL a second time to determine if we've // actually killed everyone with open files diff --git a/Utils.h b/Utils.h index 9163006..c5955cc 100644 --- a/Utils.h +++ b/Utils.h @@ -38,6 +38,9 @@ extern security_context_t sBlkidUntrustedContext; extern security_context_t sFsckContext; extern security_context_t sFsckUntrustedContext; +// TODO remove this with better solution, b/64143519 +extern bool sSleepOnUnmount; + status_t CreateDeviceNode(const std::string& path, dev_t dev); status_t DestroyDeviceNode(const std::string& path); diff --git a/VolumeManager.cpp b/VolumeManager.cpp index c1d51d9..1847ab1 100644 --- a/VolumeManager.cpp +++ b/VolumeManager.cpp @@ -62,8 +62,6 @@ using android::base::StringPrintf; using android::base::unique_fd; -bool VolumeManager::shutting_down = false; - static const char* kPathUserMount = "/mnt/user"; static const char* kPathVirtualDisk = "/data/misc/vold/virtual_disk"; @@ -535,14 +533,14 @@ int VolumeManager::shutdown() { if (mInternalEmulated == nullptr) { return 0; // already shutdown } - shutting_down = true; + android::vold::sSleepOnUnmount = false; mInternalEmulated->destroy(); mInternalEmulated = nullptr; for (const auto& disk : mDisks) { disk->destroy(); } mDisks.clear(); - shutting_down = false; + android::vold::sSleepOnUnmount = true; return 0; } diff --git a/VolumeManager.h b/VolumeManager.h index 4f62de9..b66aa2f 100644 --- a/VolumeManager.h +++ b/VolumeManager.h @@ -43,10 +43,6 @@ #define DEBUG_APPFUSE 0 class VolumeManager { -public: - //TODO remove this with better solution, b/64143519 - static bool shutting_down; - private: static VolumeManager *sInstance;