VirtualBox

Changeset 44316 in vbox for trunk


Ignore:
Timestamp:
Jan 21, 2013 9:16:41 AM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
83244
Message:

Main: Check for already used UUIDs when registering a new non file based Medium and recreate if there are conflicts

Location:
trunk/src/VBox/Main
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/VirtualBoxImpl.h

    r43041 r44316  
    246246                                 ComObjPtr<Medium> &pMedium);
    247247
     248    HRESULT checkMediaForConflicts(const Guid &aId,
     249                                   const Utf8Str &aLocation,
     250                                   Utf8Str &aConflictType,
     251                                   ComObjPtr<Medium> *pDupMedium);
     252
    248253    HRESULT findGuestOSType(const Bstr &bstrOSType,
    249254                            GuestOSType*& pGuestOSType);
     
    309314        return setErrorInternal(aResultCode, getStaticClassIID(), getStaticComponentName(), aText, false, true);
    310315    }
    311 
    312     HRESULT checkMediaForConflicts(const Guid &aId,
    313                                    const Utf8Str &aLocation,
    314                                    Utf8Str &aConflictType,
    315                                    ComObjPtr<Medium> *pDupMedium);
    316316
    317317    HRESULT registerMachine(Machine *aMachine);
  • trunk/src/VBox/Main/src-server/MediumImpl.cpp

    r44240 r44316  
    974974        AutoWriteLock treeLock(m->pVirtualBox->getMediaTreeLockHandle() COMMA_LOCKVAL_SRC_POS);
    975975        ComObjPtr<Medium> pMedium;
     976
     977        /*
     978         * Check whether the UUID is taken already and create a new one
     979         * if required.
     980         */
     981        do
     982        {
     983            Utf8Str strConflict;
     984            ComObjPtr<Medium> pMediumDup;
     985
     986            rc = m->pVirtualBox->checkMediaForConflicts(m->id, Utf8Str(""),
     987                                                        strConflict, &pMediumDup);
     988            if (   SUCCEEDED(rc)
     989                && strConflict.length()
     990                && pMediumDup.isNull())
     991            {
     992                // create new UUID
     993                unconst(m->id).create();
     994            }
     995            else
     996                break;
     997        } while (true);
     998
    976999        rc = m->pVirtualBox->registerMedium(this, &pMedium, DeviceType_HardDisk);
    977         Assert(this == pMedium);
     1000        Assert(this == pMedium || FAILED(rc));
    9781001    }
    9791002
  • trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp

    r44043 r44316  
    38443844                                           ComObjPtr<Medium> *ppMedium)
    38453845{
    3846     AssertReturn(!aId.isZero() && !aLocation.isEmpty(), E_FAIL);
     3846    AssertReturn(!aId.isZero(), E_FAIL);
    38473847    AssertReturn(ppMedium, E_INVALIDARG);
    38483848
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette