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