VirtualBox

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


Ignore:
Timestamp:
Mar 12, 2012 4:04:28 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
76772
Message:

Main/VirtualBox+Machine+Medium: redesign the medium registry save logic, as the local lists in the threads caused inconsistencies with concurrent operations and the return of spurious errors

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

Legend:

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

    r40418 r40432  
    841841    HRESULT saveStateSettings(int aFlags);
    842842
    843     void addMediumToRegistry(ComObjPtr<Medium> &pMedium,
    844                              GuidList &llRegistriesThatNeedSaving,
    845                              Guid *puuid);
     843    void addMediumToRegistry(ComObjPtr<Medium> &pMedium);
    846844
    847845    HRESULT createImplicitDiffs(IProgress *aProgress,
    848846                                ULONG aWeight,
    849                                 bool aOnline,
    850                                 GuidList *pllRegistriesThatNeedSaving);
    851     HRESULT deleteImplicitDiffs(GuidList *pllRegistriesThatNeedSaving);
     847                                bool aOnline);
     848    HRESULT deleteImplicitDiffs();
    852849
    853850    MediumAttachment* findAttachment(const MediaData::AttachmentList &ll,
     
    862859    HRESULT detachDevice(MediumAttachment *pAttach,
    863860                         AutoWriteLock &writeLock,
    864                          Snapshot *pSnapshot,
    865                          GuidList *pllRegistriesThatNeedSaving);
     861                         Snapshot *pSnapshot);
    866862
    867863    HRESULT detachAllMedia(AutoWriteLock &writeLock,
     
    937933    typedef std::list<ComObjPtr<StorageController> > StorageControllerList;
    938934    Backupable<StorageControllerList> mStorageControllers;
     935
     936    uint64_t                        uRegistryNeedsSaving;
    939937
    940938    friend class SessionMachine;
  • trunk/src/VBox/Main/include/MediumImpl.h

    r40257 r40432  
    77
    88/*
    9  * Copyright (C) 2008-2011 Oracle Corporation
     9 * Copyright (C) 2008-2012 Oracle Corporation
    1010 *
    1111 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    7070                 const Utf8Str &aFormat,
    7171                 const Utf8Str &aLocation,
    72                  const Guid &uuidMachineRegistry,
    73                  GuidList *pllRegistriesThatNeedSaving);
     72                 const Guid &uuidMachineRegistry);
    7473
    7574    // initializer for opening existing media
     
    183182    bool isInRegistry(const Guid& id);
    184183    bool getFirstRegistryMachineId(Guid &uuid) const;
    185     HRESULT addToRegistryIDList(GuidList &llRegistryIDs);
    186184
    187185    HRESULT addBackReference(const Guid &aMachineId,
     
    218216                              MediumLockList *pMediumLockList,
    219217                              ComObjPtr<Progress> *aProgress,
    220                               bool aWait,
    221                               GuidList *pllRegistriesThatNeedSaving);
     218                              bool aWait);
    222219    Utf8Str getPreferredDiffFormat();
    223220
    224     HRESULT close(GuidList *pllRegistriesThatNeedSaving, AutoCaller &autoCaller);
    225     HRESULT deleteStorage(ComObjPtr<Progress> *aProgress, bool aWait, GuidList *pllRegistriesThatNeedSaving);
     221    HRESULT close(AutoCaller &autoCaller);
     222    HRESULT deleteStorage(ComObjPtr<Progress> *aProgress, bool aWait);
    226223    HRESULT markForDeletion();
    227224    HRESULT unmarkForDeletion();
     
    243240                    MediumLockList *aMediumLockList,
    244241                    ComObjPtr<Progress> *aProgress,
    245                     bool aWait,
    246                     GuidList *pllRegistriesThatNeedSaving);
     242                    bool aWait);
    247243    void cancelMergeTo(const MediaList &aChildrenToReparent,
    248244                       MediumLockList *aMediumLockList);
     
    273269
    274270    HRESULT canClose();
    275     HRESULT unregisterWithVirtualBox(GuidList *pllRegistriesThatNeedSaving);
     271    HRESULT unregisterWithVirtualBox();
     272    void markRegistriesModified();
    276273
    277274    HRESULT setStateError();
     
    333330
    334331    HRESULT startThread(Medium::Task *pTask);
    335     HRESULT runNow(Medium::Task *pTask, GuidList *pllRegistriesThatNeedSaving);
     332    HRESULT runNow(Medium::Task *pTask);
    336333
    337334    HRESULT taskCreateBaseHandler(Medium::CreateBaseTask &task);
  • trunk/src/VBox/Main/include/VirtualBoxBase.h

    r40418 r40432  
    44
    55/*
    6  * Copyright (C) 2006-2010 Oracle Corporation
     6 * Copyright (C) 2006-2012 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    5353class Host;
    5454typedef std::list< ComObjPtr<Medium> > MediaList;
    55 typedef std::list<Guid> GuidList;
    5655
    5756////////////////////////////////////////////////////////////////////////////////
  • trunk/src/VBox/Main/include/VirtualBoxImpl.h

    r40262 r40432  
    260260    void copyPathRelativeToConfig(const Utf8Str &strSource, Utf8Str &strTarget);
    261261
    262     HRESULT registerMedium(const ComObjPtr<Medium> &pMedium, ComObjPtr<Medium> *ppMedium, DeviceType_T argType, GuidList *pllRegistriesThatNeedSaving);
    263     HRESULT unregisterMedium(Medium *pMedium, GuidList *pllRegistriesThatNeedSaving);
     262    HRESULT registerMedium(const ComObjPtr<Medium> &pMedium, ComObjPtr<Medium> *ppMedium, DeviceType_T argType);
     263    HRESULT unregisterMedium(Medium *pMedium);
    264264
    265265    void pushMediumToListWithChildren(MediaList &llMedia, Medium *pMedium);
     
    276276    HRESULT saveSettings();
    277277
    278     static void addGuidToListUniquely(GuidList &llRegistriesThatNeedSaving, const Guid &uuid);
    279     HRESULT saveRegistries(const GuidList &llRegistriesThatNeedSaving);
     278    void markRegistryModified(const Guid &uuid);
     279    void saveModifiedRegistries();
    280280
    281281    static HRESULT ensureFilePathExists(const Utf8Str &strFileName, bool fCreate);
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