Index: /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp	(revision 37603)
+++ /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp	(revision 37604)
@@ -621,4 +621,5 @@
                     if (FAILED(rc)) throw rc;
 
+                    srcLock.release();
                     /* Do the disk cloning. */
                     ComPtr<IProgress> progress2;
@@ -630,5 +631,4 @@
 
                     /* Wait until the asynchrony process has finished. */
-                    srcLock.release();
                     rc = d->pProgress->WaitForAsyncProgressCompletion(progress2);
                     srcLock.acquire();
@@ -657,6 +657,9 @@
                     map.insert(TStrMediumPair(Utf8Str(bstrSrcId), pTarget));
                     /* Global register the new harddisk */
-                    rc = p->mParent->registerHardDisk(pTarget, NULL /* pllRegistriesThatNeedSaving */);
-                    if (FAILED(rc)) return rc;
+                    {
+                        AutoWriteLock tlock(p->mParent->getMediaTreeLockHandle() COMMA_LOCKVAL_SRC_POS);
+                        rc = p->mParent->registerHardDisk(pTarget, NULL /* pllRegistriesThatNeedSaving */);
+                        if (FAILED(rc)) return rc;
+                    }
                     /* This medium becomes the parent of the next medium in the
                      * chain. */
@@ -697,6 +700,9 @@
                 newMedias.append(diff);
                 /* Global register the new harddisk */
-                rc = p->mParent->registerHardDisk(diff, NULL /* pllRegistriesThatNeedSaving */);
-                if (FAILED(rc)) return rc;
+                {
+                    AutoWriteLock tlock(p->mParent->getMediaTreeLockHandle() COMMA_LOCKVAL_SRC_POS);
+                    rc = p->mParent->registerHardDisk(diff, NULL /* pllRegistriesThatNeedSaving */);
+                    if (FAILED(rc)) return rc;
+                }
                 /* This medium becomes the parent of the next medium in the
                  * chain. */
