Changeset 74838 in vbox
- Timestamp:
- Oct 15, 2018 9:25:50 AM (6 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/Devices/Storage/DrvVD.cpp (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DrvVD.cpp
r74309 r74838 2915 2915 bool fXchg = ASMAtomicCmpXchgU32((volatile uint32_t *)&pIoReq->enmState, VDIOREQSTATE_COMPLETING, VDIOREQSTATE_ACTIVE); 2916 2916 if (fXchg) 2917 ASMAtomicDecU32(&pThis->cIoReqsActive); 2917 { 2918 uint32_t cNew = ASMAtomicDecU32(&pThis->cIoReqsActive); 2919 AssertMsg(cNew != UINT32_MAX, ("Number of active requests underflowed!\n")); 2920 } 2918 2921 else 2919 2922 { … … 3062 3065 RTListAppend(&pThis->LstIoReqRedo, &pIoReq->NdLstWait); 3063 3066 RTCritSectLeave(&pThis->CritSectIoReqRedo); 3064 ASMAtomicDecU32(&pThis->cIoReqsActive); 3067 uint32_t cNew = ASMAtomicDecU32(&pThis->cIoReqsActive); 3068 AssertMsg(cNew != UINT32_MAX, ("Number of active requests underflowed!\n")); 3065 3069 pThis->pDrvMediaExPort->pfnIoReqStateChanged(pThis->pDrvMediaExPort, pIoReq, &pIoReq->abAlloc[0], 3066 3070 PDMMEDIAEXIOREQSTATE_SUSPENDED); 3071 LogFlowFunc(("Suspended I/O request %#p\n", pIoReq)); 3067 3072 rcReq = VINF_PDM_MEDIAEX_IOREQ_IN_PROGRESS; 3068 3073 } … … 3157 3162 pThis->pDrvMediaExPort->pfnIoReqStateChanged(pThis->pDrvMediaExPort, pIoReq, &pIoReq->abAlloc[0], 3158 3163 PDMMEDIAEXIOREQSTATE_SUSPENDED); 3164 LogFlowFunc(("Suspended I/O request %#p\n", pIoReq)); 3159 3165 RTCritSectLeave(&pThis->CritSectIoReqsIoBufWait); 3160 3166 rc = VINF_PDM_MEDIAEX_IOREQ_IN_PROGRESS; … … 3703 3709 } 3704 3710 3705 if (fXchg) 3706 ASMAtomicDecU32(&pThis->cIoReqsActive); 3711 if (fXchg && enmStateOld == VDIOREQSTATE_ACTIVE) 3712 { 3713 uint32_t cNew = ASMAtomicDecU32(&pThis->cIoReqsActive); 3714 AssertMsg(cNew != UINT32_MAX, ("Number of active requests underflowed!\n")); 3715 } 3707 3716 3708 3717 return fXchg; … … 3746 3755 pThis->pDrvMediaExPort->pfnIoReqStateChanged(pThis->pDrvMediaExPort, pIoReqCur, &pIoReqCur->abAlloc[0], 3747 3756 PDMMEDIAEXIOREQSTATE_SUSPENDED); 3757 LogFlowFunc(("Suspended I/O request %#p\n", pIoReqCur)); 3748 3758 } 3749 3759 RTCritSectLeave(&pThis->CritSectIoReqsIoBufWait); … … 4753 4763 drvvdSetWritable(pThis); 4754 4764 pThis->fSuspending = false; 4765 pThis->fRedo = false; 4755 4766 4756 4767 if (pThis->pBlkCache) … … 4770 4781 PDMMEDIAEXIOREQSTATE_ACTIVE); 4771 4782 ASMAtomicIncU32(&pThis->cIoReqsActive); 4783 LogFlowFunc(("Resumed I/O request %#p\n", pIoReq)); 4772 4784 } 4773 4785 RTCritSectLeave(&pThis->CritSectIoReqsIoBufWait); … … 4783 4795 ASMAtomicIncU32(&pThis->cIoReqsActive); 4784 4796 4797 LogFlowFunc(("Resuming I/O request %#p fXchg=%RTbool\n", pIoReq, fXchg)); 4785 4798 if (fXchg) 4786 4799 { 4787 4800 pThis->pDrvMediaExPort->pfnIoReqStateChanged(pThis->pDrvMediaExPort, pIoReq, &pIoReq->abAlloc[0], 4788 4801 PDMMEDIAEXIOREQSTATE_ACTIVE); 4802 LogFlowFunc(("Resumed I/O request %#p\n", pIoReq)); 4789 4803 if ( pIoReq->enmType == PDMMEDIAEXIOREQTYPE_READ 4790 4804 || pIoReq->enmType == PDMMEDIAEXIOREQTYPE_WRITE) … … 4987 5001 pThis->pRegionList = NULL; 4988 5002 pThis->fSuspending = false; 5003 pThis->fRedo = false; 4989 5004 4990 5005 for (unsigned i = 0; i < RT_ELEMENTS(pThis->aIoReqAllocBins); i++)
Note:
See TracChangeset
for help on using the changeset viewer.

