VirtualBox

Ignore:
Timestamp:
Apr 14, 2015 9:07:45 AM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
99544
Message:

Main/Machine+Snapshot: fix state checks and introduce standardized state checks for snapshot operations as a safety net

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/SnapshotImpl.cpp

    r55214 r55233  
    14301430                        Global::stringifyMachineState(mData->mMachineState));
    14311431
    1432     HRESULT rc = S_OK;
     1432    HRESULT rc = i_checkStateDependency(MutableOrSavedOrRunningStateDep);
     1433    if (FAILED(rc))
     1434        return rc;
    14331435
    14341436    // prepare the progress object:
     
    15841586        {
    15851587            Bstr value;
    1586             HRESULT rc = GetExtraData(Bstr("VBoxInternal2/ForceTakeSnapshotWithoutState").raw(),
    1587                                       value.asOutParam());
     1588            rc = GetExtraData(Bstr("VBoxInternal2/ForceTakeSnapshotWithoutState").raw(),
     1589                              value.asOutParam());
    15881590            if (FAILED(rc) || value != "1")
    15891591                // creating a new online snapshot: we need a fresh saved state file
     
    19511953                        Global::stringifyMachineState(mData->mMachineState));
    19521954
     1955    HRESULT rc = i_checkStateDependency(MutableOrSavedStateDep);
     1956    if (FAILED(rc))
     1957        return rc;
     1958
    19531959    ISnapshot* iSnapshot = aSnapshot;
    19541960    ComObjPtr<Snapshot> pSnapshot(static_cast<Snapshot*>(iSnapshot));
    19551961    ComObjPtr<SnapshotMachine> pSnapMachine = pSnapshot->i_getSnapshotMachine();
    1956 
    1957     HRESULT rc = S_OK;
    19581962
    19591963    // create a progress object. The number of operations is:
     
    23512355    AssertReturn(!aStartId.isZero() && !aEndId.isZero() && aStartId.isValid() && aEndId.isValid(), E_INVALIDARG);
    23522356
    2353 
    23542357    /** @todo implement the "and all children" and "range" variants */
    23552358    if (aDeleteAllChildren || aStartId != aEndId)
     
    23752378                        Global::stringifyMachineState(mData->mMachineState));
    23762379
     2380    HRESULT rc = i_checkStateDependency(MutableOrSavedOrRunningStateDep);
     2381    if (FAILED(rc))
     2382        return rc;
     2383
    23772384    ComObjPtr<Snapshot> pSnapshot;
    2378     HRESULT rc = i_findSnapshotById(aStartId, pSnapshot, true /* aSetError */);
    2379     if (FAILED(rc)) return rc;
     2385    rc = i_findSnapshotById(aStartId, pSnapshot, true /* aSetError */);
     2386    if (FAILED(rc))
     2387        return rc;
    23802388
    23812389    AutoWriteLock snapshotLock(pSnapshot COMMA_LOCKVAL_SRC_POS);
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