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
This commit is contained in:
Paul Crowley 2017-10-20 08:07:53 -07:00
parent 4ddf576ca8
commit 56292ef119
4 changed files with 16 additions and 17 deletions

View file

@ -14,10 +14,10 @@
* limitations under the License.
*/
#include "sehandle.h"
#include "Utils.h"
#include "Process.h"
#include "VolumeManager.h"
#include "sehandle.h"
#include <android-base/file.h>
#include <android-base/logging.h>
@ -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

View file

@ -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);

View file

@ -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;
}

View file

@ -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;