Merge "Remove StubVolume disks upon vold reset events"

This commit is contained in:
Treehugger Robot 2021-12-08 08:25:46 +00:00 committed by Gerrit Code Review
commit e8d0e486a3
2 changed files with 14 additions and 3 deletions

View file

@ -899,10 +899,21 @@ int VolumeManager::reset() {
}
mInternalEmulatedVolumes.clear();
// Destroy and recreate all disks except that StubVolume disks are just
// destroyed and removed from both mDisks and mPendingDisks.
// StubVolumes are managed from outside Android (e.g. from Chrome OS) and
// their disk recreation on reset events should be handled from outside by
// calling createStubVolume() again.
for (const auto& disk : mDisks) {
disk->destroy();
disk->create();
if (!disk->isStub()) {
disk->create();
}
}
const auto isStub = [](const auto& disk) { return disk->isStub(); };
mDisks.remove_if(isStub);
mPendingDisks.remove_if(isStub);
updateVirtualDisk();
mAddedUsers.clear();
mStartedUsers.clear();

View file

@ -70,6 +70,8 @@ class Disk {
const std::string& getLabel() const { return mLabel; }
int getFlags() const { return mFlags; }
bool isStub() const { return (mFlags & kStubInvisible) || (mFlags & kStubVisible); }
std::shared_ptr<VolumeBase> findVolume(const std::string& id);
void listVolumes(VolumeBase::Type type, std::list<std::string>& list) const;
@ -123,8 +125,6 @@ class Disk {
int getMaxMinors();
bool isStub() { return (mFlags & kStubInvisible) || (mFlags & kStubVisible); }
DISALLOW_COPY_AND_ASSIGN(Disk);
};