VirtualBox

Changeset 86501 in vbox for trunk/src/VBox/Main/include


Ignore:
Timestamp:
Oct 9, 2020 12:28:32 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
140816
Message:

VBoxSVC: Fix Medium leak when encoutering duplicate instances while loading a media registry (from settings) via VirtualBox::initMedia(). The media registration is now moved to before any children are loaded, so that we use the right parent for them. This essentially changes the operation to a merge. An unaddressed issue is that on child load failure, we will leave the parent(s) still registered but non-functioning (uninit was done). (The old code would just leave any successfully loaded children registered with non-working parents only accessible via their parent attribute.) bugref:9841

Location:
trunk/src/VBox/Main/include
Files:
2 edited

Legend:

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

    r85284 r86501  
    7979                    const settings::Medium &data,
    8080                    const Utf8Str &strMachineFolder);
    81     HRESULT init(VirtualBox *aVirtualBox,
    82                  Medium *aParent,
    83                  DeviceType_T aDeviceType,
    84                  const Guid &uuidMachineRegistry,
    85                  const settings::Medium &data,
    86                  const Utf8Str &strMachineFolder,
    87                  AutoWriteLock &mediaTreeLock);
     81    HRESULT initFromSettings(VirtualBox *aVirtualBox,
     82                             Medium *aParent,
     83                             DeviceType_T aDeviceType,
     84                             const Guid &uuidMachineRegistry,
     85                             const settings::Medium &data,
     86                             const Utf8Str &strMachineFolder,
     87                             AutoWriteLock &mediaTreeLock,
     88                             ComObjPtr<Medium> *ppRegistered);
    8889
    8990    // initializer for host floppy/DVD
     
    119120    /* handles caller/locking itself */
    120121    bool i_addRegistry(const Guid &id);
     122    bool i_addRegistryNoCallerCheck(const Guid &id);
    121123    /* handles caller/locking itself, caller is responsible for tree lock */
    122124    bool i_addRegistryRecursive(const Guid &id);
  • trunk/src/VBox/Main/include/VirtualBoxImpl.h

    r86069 r86501  
    277277    void i_copyPathRelativeToConfig(const Utf8Str &strSource, Utf8Str &strTarget);
    278278    HRESULT i_registerMedium(const ComObjPtr<Medium> &pMedium, ComObjPtr<Medium> *ppMedium,
    279                              AutoWriteLock &mediaTreeLock);
     279                             AutoWriteLock &mediaTreeLock, bool fCalledFromMediumInit = false);
    280280    HRESULT i_unregisterMedium(Medium *pMedium);
    281281    void i_pushMediumToListWithChildren(MediaList &llMedia, Medium *pMedium);
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