VirtualBox

Changeset 71581 in vbox


Ignore:
Timestamp:
Mar 30, 2018 10:38:27 AM (6 years ago)
Author:
vboxsync
Message:

bugref:8345. Attempt to fix the subtle bug with MEDIUMTASK structure initialization.

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

Legend:

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

    r71053 r71581  
    3737typedef struct
    3838{
     39    bool                    fSnapshot;
    3940    Utf8Str                 strBaseName;
    4041    ComPtr<IMedium>         pMedium;
    4142    uint32_t                uIdx;
    4243    ULONG                   uWeight;
    43     bool                    fSnapshot;
    44 } MEDIUMTASK;
     44} MEDIUMTASKMOVE;
    4545
    4646typedef struct
    4747{
    48     RTCList<MEDIUMTASK>     chain;
     48    RTCList<MEDIUMTASKMOVE>     chain;
    4949    DeviceType_T            devType;
    5050    bool                    fCreateDiffs;
    5151    bool                    fAttachLinked;
    52 } MEDIUMTASKCHAIN;
     52} MEDIUMTASKCHAINMOVE;
    5353
    5454typedef struct
     
    5757    Utf8Str                 strSaveStateFile;
    5858    ULONG                   uWeight;
    59 } SAVESTATETASK;
     59} SAVESTATETASKMOVE;
    6060
    6161struct fileList_t;
     
    8787    static void i_MoveVMThreadTask(MachineMoveVM* task);
    8888
    89     RTCList<MEDIUMTASKCHAIN>    llMedias;
    90     RTCList<SAVESTATETASK>      llSaveStateFiles;
    91     std::map<Utf8Str, MEDIUMTASK>     finalMediumsMap;
    92     std::map<Utf8Str, SAVESTATETASK>  finalSaveStateFilesMap;
     89    RTCList<MEDIUMTASKCHAINMOVE>    llMedias;
     90    RTCList<SAVESTATETASKMOVE>      llSaveStateFiles;
     91    std::map<Utf8Str, MEDIUMTASKMOVE>     finalMediumsMap;
     92    std::map<Utf8Str, SAVESTATETASKMOVE>  finalSaveStateFilesMap;
    9393    std::map<VBoxFolder_t, Utf8Str> vmFolders;
    9494
     
    111111    inline HRESULT queryBaseName(const ComPtr<IMedium> &pMedium, Utf8Str &strBaseName) const;
    112112    HRESULT queryMediasForAllStates(const std::vector<ComObjPtr<Machine> > &aMachineList);
    113     void updateProgressStats(MEDIUMTASKCHAIN &mtc, ULONG &uCount, ULONG &uTotalWeight) const;
     113    void updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const;
    114114    HRESULT addSaveState(const ComObjPtr<Machine> &machine);
    115115    void printStateFile(settings::SnapshotsList &snl);
     
    117117    HRESULT getFolderSize(const Utf8Str& strRootFolder, uint64_t& size);
    118118    HRESULT deleteFiles(const RTCList<Utf8Str>& listOfFiles);
    119     HRESULT updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASK>& listOfFiles,
     119    HRESULT updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASKMOVE>& listOfFiles,
    120120                                    const Utf8Str& sourcePath, const Utf8Str& targetPath);
    121     HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASK>& listOfDisks, const Utf8Str* strTargetFolder = NULL);
    122     HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASK>& listOfDisks);
     121    HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks, const Utf8Str* strTargetFolder = NULL);
     122    HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks);
    123123    bool isMediumTypeSupportedForMoving(const ComPtr<IMedium> &pMedium);
    124124};
  • trunk/src/VBox/Main/src-server/MachineImplMoveVM.cpp

    r71376 r71581  
    290290            {
    291291                LONG64  cbSize = 0;
    292                 MEDIUMTASKCHAIN &mtc = llMedias.at(i);
     292                MEDIUMTASKCHAINMOVE &mtc = llMedias.at(i);
    293293                for (size_t a = mtc.chain.size(); a > 0; --a)
    294294                {
     
    307307                        if (FAILED(rc)) throw rc;
    308308
    309                         std::pair<std::map<Utf8Str, MEDIUMTASK>::iterator,bool> ret;
     309                        std::pair<std::map<Utf8Str, MEDIUMTASKMOVE>::iterator,bool> ret;
    310310                        ret = finalMediumsMap.insert(std::make_pair(name, mtc.chain[a - 1]));
    311311                        if (ret.second == true)
     
    332332            {
    333333                uint64_t cbFile = 0;
    334                 SAVESTATETASK &sst = llSaveStateFiles.at(i);
     334                SAVESTATETASKMOVE &sst = llSaveStateFiles.at(i);
    335335
    336336                Utf8Str name = sst.strSaveStateFile;
     
    341341                    if (RT_SUCCESS(vrc))
    342342                    {
    343                         std::pair<std::map<Utf8Str, SAVESTATETASK>::iterator,bool> ret;
     343                        std::pair<std::map<Utf8Str, SAVESTATETASKMOVE>::iterator,bool> ret;
    344344                        ret = finalSaveStateFilesMap.insert(std::make_pair(name, sst));
    345345                        if (ret.second == true)
     
    608608            }
    609609
    610             std::map<Utf8Str, SAVESTATETASK>::iterator itState = taskMoveVM->finalSaveStateFilesMap.begin();
     610            std::map<Utf8Str, SAVESTATETASKMOVE>::iterator itState = taskMoveVM->finalSaveStateFilesMap.begin();
    611611            while (itState != taskMoveVM->finalSaveStateFilesMap.end())
    612612            {
    613                 const SAVESTATETASK &sst = itState->second;
     613                const SAVESTATETASKMOVE &sst = itState->second;
    614614                const Utf8Str &strTrgSaveState = Utf8StrFmt("%s%c%s", strTrgSnapshotFolder.c_str(), RTPATH_DELIMITER,
    615615                                                            RTPathFilename(sst.strSaveStateFile.c_str()));
     
    940940}
    941941
    942 HRESULT MachineMoveVM::moveAllDisks(const std::map<Utf8Str, MEDIUMTASK>& listOfDisks,
     942HRESULT MachineMoveVM::moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks,
    943943                                    const Utf8Str* strTargetFolder)
    944944{
     
    950950
    951951    try{
    952         std::map<Utf8Str, MEDIUMTASK>::const_iterator itMedium = listOfDisks.begin();
     952        std::map<Utf8Str, MEDIUMTASKMOVE>::const_iterator itMedium = listOfDisks.begin();
    953953        while(itMedium != listOfDisks.end())
    954954        {
    955             const MEDIUMTASK &mt = itMedium->second;
     955            const MEDIUMTASKMOVE &mt = itMedium->second;
    956956            ComPtr<IMedium> pMedium = mt.pMedium;
    957957            Utf8Str strTargetImageName;
     
    10141014            rc = pMedium->SetLocation(bstrLocation.raw(), moveDiskProgress.asOutParam());
    10151015            /* Wait until the async process has finished. */
    1016 
    10171016            rc = m_pProgress->WaitForAsyncProgressCompletion(moveDiskProgress);
    10181017
     1018            /*acquire the lock back*/
    10191019            machineLock.acquire();
     1020
    10201021            if (FAILED(rc)) throw rc;
    10211022
     
    10521053}
    10531054
    1054 HRESULT MachineMoveVM::updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASK>& listOfFiles,
     1055HRESULT MachineMoveVM::updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASKMOVE>& listOfFiles,
    10551056                                               const Utf8Str& sourcePath, const Utf8Str& targetPath)
    10561057{
    10571058    HRESULT rc = S_OK;
    10581059
    1059     std::map<Utf8Str, SAVESTATETASK>::const_iterator itState = listOfFiles.begin();
     1060    std::map<Utf8Str, SAVESTATETASKMOVE>::const_iterator itState = listOfFiles.begin();
    10601061    while (itState != listOfFiles.end())
    10611062    {
    1062         const SAVESTATETASK &sst = itState->second;
     1063        const SAVESTATETASKMOVE &sst = itState->second;
    10631064
    10641065        if (sst.snapshotUuid != Guid::Empty)
     
    12921293            }
    12931294
    1294             MEDIUMTASKCHAIN mtc;
     1295            MEDIUMTASKCHAINMOVE mtc;
    12951296            mtc.devType = deviceType;
    12961297
     
    13131314                if (FAILED(rc)) throw rc;
    13141315
    1315                 MEDIUMTASK mt;
     1316                MEDIUMTASKMOVE mt;// = {false, "basename", NULL, 0, 0};
    13161317                mt.strBaseName = bstrLocation;
    13171318                Utf8Str strFolder = vmFolders[VBox_SnapshotFolder];
     
    13461347    {
    13471348        uint32_t uIdx = 0;
    1348         MEDIUMTASKCHAIN &mtc = llMedias.at(i);
     1349        MEDIUMTASKCHAINMOVE &mtc = llMedias.at(i);
    13491350        for (size_t a = mtc.chain.size(); a > 0; --a)
    13501351            mtc.chain[a - 1].uIdx = uIdx++;
     
    13611362    if (!bstrSrcSaveStatePath.isEmpty())
    13621363    {
    1363         SAVESTATETASK sst;
     1364        SAVESTATETASKMOVE sst;
    13641365
    13651366        sst.snapshotUuid = machine->i_getSnapshotId();
     
    13791380}
    13801381
    1381 void MachineMoveVM::updateProgressStats(MEDIUMTASKCHAIN &mtc, ULONG &uCount, ULONG &uTotalWeight) const
     1382void MachineMoveVM::updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const
    13821383{
    13831384
     
    13911392    for (size_t e = mtc.chain.size(); e > 0; --e)
    13921393    {
    1393         MEDIUMTASK &mt = mtc.chain.at(e - 1);
     1394        MEDIUMTASKMOVE &mt = mtc.chain.at(e - 1);
    13941395        mt.uWeight += uMaxWeight;
    13951396
Note: See TracChangeset for help on using the changeset viewer.

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