recovery: fix volmgr cleaning up
* Don't reset pointer to netlink manager
* Delete disks in stop() rather then in ~VolumeManager
* Call destroy() before deleting disks cause delete expects the
disk to be destroyed
* Clear the lists or we would read garbage data on the next scan
Change-Id: Idadfa1f33b7cb5f2f3c780848a99344a6608420e
diff --git a/volume_manager/VolumeManager.cpp b/volume_manager/VolumeManager.cpp
index afd4e8a..ba8ad71 100644
--- a/volume_manager/VolumeManager.cpp
+++ b/volume_manager/VolumeManager.cpp
@@ -156,12 +156,6 @@
VolumeManager::~VolumeManager(void) {
stop();
- for (auto& disk : mDisks) {
- delete disk;
- }
- for (auto& source : mDiskSources) {
- delete source;
- }
}
bool VolumeManager::start(VolumeWatcher* watcher, struct selabel_handle* sehandle_) {
@@ -186,9 +180,6 @@
mInternalEmulated->create();
}
- if (!mNetlinkManager) {
- mNetlinkManager = NetlinkManager::Instance();
- }
if (!mNetlinkManager->start()) {
LOG(ERROR) << "Unable to start NetlinkManager";
return false;
@@ -203,8 +194,17 @@
}
void VolumeManager::stop(void) {
+ for (auto& disk : mDisks) {
+ disk->destroy();
+ delete disk;
+ }
+ mDisks.clear();
+ for (auto& source : mDiskSources) {
+ delete source;
+ }
+ mDiskSources.clear();
+
mNetlinkManager->stop();
- mNetlinkManager = nullptr;
mWatcher = nullptr;
}