VirtualBox

Changeset 65347 in vbox for trunk/src


Ignore:
Timestamp:
Jan 17, 2017 9:39:30 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
112933
Message:

Devices/Storage/DrvVD: Fix cancelling active requests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DrvVD.cpp

    r65346 r65347  
    27572757        RTListForEach(&pThis->aIoReqAllocBins[idxBin].LstIoReqAlloc, pIt, PDMMEDIAEXIOREQINT, NdAllocatedList)
    27582758        {
    2759             if (RT_UNLIKELY(pIt->uIoReqId == pIoReq->uIoReqId))
     2759            if (RT_UNLIKELY(   pIt->uIoReqId == pIoReq->uIoReqId
     2760                            && pIt->enmState != VDIOREQSTATE_CANCELED))
    27602761            {
    27612762                rc = VERR_PDM_MEDIAEX_IOREQID_CONFLICT;
     
    35003501static bool drvvdMediaExIoReqCancel(PVBOXDISK pThis, PPDMMEDIAEXIOREQINT pIoReq)
    35013502{
    3502     bool fXchg = true;
     3503    bool fXchg = false;
    35033504    VDIOREQSTATE enmStateOld = (VDIOREQSTATE)ASMAtomicReadU32((volatile uint32_t *)&pIoReq->enmState);
    35043505
     
    35153516    {
    35163517        fXchg = ASMAtomicCmpXchgU32((volatile uint32_t *)&pIoReq->enmState, VDIOREQSTATE_CANCELED, enmStateOld);
    3517         if (!fXchg)
    3518             enmStateOld = (VDIOREQSTATE)ASMAtomicReadU32((volatile uint32_t *)&pIoReq->enmState);
     3518        if (fXchg)
     3519            break;
     3520
     3521        enmStateOld = (VDIOREQSTATE)ASMAtomicReadU32((volatile uint32_t *)&pIoReq->enmState);
    35193522    }
    35203523
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