Index: /trunk/src/VBox/Main/include/MachineImplMoveVM.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImplMoveVM.h	(revision 71580)
+++ /trunk/src/VBox/Main/include/MachineImplMoveVM.h	(revision 71581)
@@ -37,18 +37,18 @@
 typedef struct
 {
+    bool                    fSnapshot;
     Utf8Str                 strBaseName;
     ComPtr<IMedium>         pMedium;
     uint32_t                uIdx;
     ULONG                   uWeight;
-    bool                    fSnapshot;
-} MEDIUMTASK;
+} MEDIUMTASKMOVE;
 
 typedef struct
 {
-    RTCList<MEDIUMTASK>     chain;
+    RTCList<MEDIUMTASKMOVE>     chain;
     DeviceType_T            devType;
     bool                    fCreateDiffs;
     bool                    fAttachLinked;
-} MEDIUMTASKCHAIN;
+} MEDIUMTASKCHAINMOVE;
 
 typedef struct
@@ -57,5 +57,5 @@
     Utf8Str                 strSaveStateFile;
     ULONG                   uWeight;
-} SAVESTATETASK;
+} SAVESTATETASKMOVE;
 
 struct fileList_t;
@@ -87,8 +87,8 @@
     static void i_MoveVMThreadTask(MachineMoveVM* task);
 
-    RTCList<MEDIUMTASKCHAIN>    llMedias;
-    RTCList<SAVESTATETASK>      llSaveStateFiles;
-    std::map<Utf8Str, MEDIUMTASK>     finalMediumsMap;
-    std::map<Utf8Str, SAVESTATETASK>  finalSaveStateFilesMap;
+    RTCList<MEDIUMTASKCHAINMOVE>    llMedias;
+    RTCList<SAVESTATETASKMOVE>      llSaveStateFiles;
+    std::map<Utf8Str, MEDIUMTASKMOVE>     finalMediumsMap;
+    std::map<Utf8Str, SAVESTATETASKMOVE>  finalSaveStateFilesMap;
     std::map<VBoxFolder_t, Utf8Str> vmFolders;
 
@@ -111,5 +111,5 @@
     inline HRESULT queryBaseName(const ComPtr<IMedium> &pMedium, Utf8Str &strBaseName) const;
     HRESULT queryMediasForAllStates(const std::vector<ComObjPtr<Machine> > &aMachineList);
-    void updateProgressStats(MEDIUMTASKCHAIN &mtc, ULONG &uCount, ULONG &uTotalWeight) const;
+    void updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const;
     HRESULT addSaveState(const ComObjPtr<Machine> &machine);
     void printStateFile(settings::SnapshotsList &snl);
@@ -117,8 +117,8 @@
     HRESULT getFolderSize(const Utf8Str& strRootFolder, uint64_t& size);
     HRESULT deleteFiles(const RTCList<Utf8Str>& listOfFiles);
-    HRESULT updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASK>& listOfFiles,
+    HRESULT updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASKMOVE>& listOfFiles,
                                     const Utf8Str& sourcePath, const Utf8Str& targetPath);
-    HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASK>& listOfDisks, const Utf8Str* strTargetFolder = NULL);
-    HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASK>& listOfDisks);
+    HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks, const Utf8Str* strTargetFolder = NULL);
+    HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks);
     bool isMediumTypeSupportedForMoving(const ComPtr<IMedium> &pMedium);
 };
Index: /trunk/src/VBox/Main/src-server/MachineImplMoveVM.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImplMoveVM.cpp	(revision 71580)
+++ /trunk/src/VBox/Main/src-server/MachineImplMoveVM.cpp	(revision 71581)
@@ -290,5 +290,5 @@
             {
                 LONG64  cbSize = 0;
-                MEDIUMTASKCHAIN &mtc = llMedias.at(i);
+                MEDIUMTASKCHAINMOVE &mtc = llMedias.at(i);
                 for (size_t a = mtc.chain.size(); a > 0; --a)
                 {
@@ -307,5 +307,5 @@
                         if (FAILED(rc)) throw rc;
 
-                        std::pair<std::map<Utf8Str, MEDIUMTASK>::iterator,bool> ret;
+                        std::pair<std::map<Utf8Str, MEDIUMTASKMOVE>::iterator,bool> ret;
                         ret = finalMediumsMap.insert(std::make_pair(name, mtc.chain[a - 1]));
                         if (ret.second == true)
@@ -332,5 +332,5 @@
             {
                 uint64_t cbFile = 0;
-                SAVESTATETASK &sst = llSaveStateFiles.at(i);
+                SAVESTATETASKMOVE &sst = llSaveStateFiles.at(i);
 
                 Utf8Str name = sst.strSaveStateFile;
@@ -341,5 +341,5 @@
                     if (RT_SUCCESS(vrc))
                     {
-                        std::pair<std::map<Utf8Str, SAVESTATETASK>::iterator,bool> ret;
+                        std::pair<std::map<Utf8Str, SAVESTATETASKMOVE>::iterator,bool> ret;
                         ret = finalSaveStateFilesMap.insert(std::make_pair(name, sst));
                         if (ret.second == true)
@@ -608,8 +608,8 @@
             }
 
-            std::map<Utf8Str, SAVESTATETASK>::iterator itState = taskMoveVM->finalSaveStateFilesMap.begin();
+            std::map<Utf8Str, SAVESTATETASKMOVE>::iterator itState = taskMoveVM->finalSaveStateFilesMap.begin();
             while (itState != taskMoveVM->finalSaveStateFilesMap.end())
             {
-                const SAVESTATETASK &sst = itState->second;
+                const SAVESTATETASKMOVE &sst = itState->second;
                 const Utf8Str &strTrgSaveState = Utf8StrFmt("%s%c%s", strTrgSnapshotFolder.c_str(), RTPATH_DELIMITER,
                                                             RTPathFilename(sst.strSaveStateFile.c_str()));
@@ -940,5 +940,5 @@
 }
 
-HRESULT MachineMoveVM::moveAllDisks(const std::map<Utf8Str, MEDIUMTASK>& listOfDisks,
+HRESULT MachineMoveVM::moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks,
                                     const Utf8Str* strTargetFolder)
 {
@@ -950,8 +950,8 @@
 
     try{
-        std::map<Utf8Str, MEDIUMTASK>::const_iterator itMedium = listOfDisks.begin();
+        std::map<Utf8Str, MEDIUMTASKMOVE>::const_iterator itMedium = listOfDisks.begin();
         while(itMedium != listOfDisks.end())
         {
-            const MEDIUMTASK &mt = itMedium->second;
+            const MEDIUMTASKMOVE &mt = itMedium->second;
             ComPtr<IMedium> pMedium = mt.pMedium;
             Utf8Str strTargetImageName;
@@ -1014,8 +1014,9 @@
             rc = pMedium->SetLocation(bstrLocation.raw(), moveDiskProgress.asOutParam());
             /* Wait until the async process has finished. */
-
             rc = m_pProgress->WaitForAsyncProgressCompletion(moveDiskProgress);
 
+            /*acquire the lock back*/
             machineLock.acquire();
+
             if (FAILED(rc)) throw rc;
 
@@ -1052,13 +1053,13 @@
 }
 
-HRESULT MachineMoveVM::updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASK>& listOfFiles,
+HRESULT MachineMoveVM::updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASKMOVE>& listOfFiles,
                                                const Utf8Str& sourcePath, const Utf8Str& targetPath)
 {
     HRESULT rc = S_OK;
 
-    std::map<Utf8Str, SAVESTATETASK>::const_iterator itState = listOfFiles.begin();
+    std::map<Utf8Str, SAVESTATETASKMOVE>::const_iterator itState = listOfFiles.begin();
     while (itState != listOfFiles.end())
     {
-        const SAVESTATETASK &sst = itState->second;
+        const SAVESTATETASKMOVE &sst = itState->second;
 
         if (sst.snapshotUuid != Guid::Empty)
@@ -1292,5 +1293,5 @@
             }
 
-            MEDIUMTASKCHAIN mtc;
+            MEDIUMTASKCHAINMOVE mtc;
             mtc.devType = deviceType;
 
@@ -1313,5 +1314,5 @@
                 if (FAILED(rc)) throw rc;
 
-                MEDIUMTASK mt;
+                MEDIUMTASKMOVE mt;// = {false, "basename", NULL, 0, 0};
                 mt.strBaseName = bstrLocation;
                 Utf8Str strFolder = vmFolders[VBox_SnapshotFolder];
@@ -1346,5 +1347,5 @@
     {
         uint32_t uIdx = 0;
-        MEDIUMTASKCHAIN &mtc = llMedias.at(i);
+        MEDIUMTASKCHAINMOVE &mtc = llMedias.at(i);
         for (size_t a = mtc.chain.size(); a > 0; --a)
             mtc.chain[a - 1].uIdx = uIdx++;
@@ -1361,5 +1362,5 @@
     if (!bstrSrcSaveStatePath.isEmpty())
     {
-        SAVESTATETASK sst;
+        SAVESTATETASKMOVE sst;
 
         sst.snapshotUuid = machine->i_getSnapshotId();
@@ -1379,5 +1380,5 @@
 }
 
-void MachineMoveVM::updateProgressStats(MEDIUMTASKCHAIN &mtc, ULONG &uCount, ULONG &uTotalWeight) const
+void MachineMoveVM::updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const
 {
 
@@ -1391,5 +1392,5 @@
     for (size_t e = mtc.chain.size(); e > 0; --e)
     {
-        MEDIUMTASK &mt = mtc.chain.at(e - 1);
+        MEDIUMTASKMOVE &mt = mtc.chain.at(e - 1);
         mt.uWeight += uMaxWeight;
 
