VirtualBox

Changeset 37121 in vbox


Ignore:
Timestamp:
May 17, 2011 11:04:30 AM (14 years ago)
Author:
vboxsync
Message:

VD: Fix deadlock

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Storage/VD.cpp

    r37119 r37121  
    26212621                    && ASMAtomicCmpXchgBool(&pIoCtxParent->fComplete, true, false))
    26222622                {
     2623                    RTCritSectLeave(&pDisk->CritSect);
    26232624                    LogFlowFunc(("Parent I/O context completed pIoCtxParent=%#p rcReq=%Rrc\n", pIoCtxParent, pIoCtxParent->rcReq));
    26242625                    pIoCtxParent->Type.Root.pfnComplete(pIoCtxParent->Type.Root.pvUser1,
     
    26272628                    vdThreadFinishWrite(pDisk);
    26282629                    vdIoCtxFree(pDisk, pIoCtxParent);
     2630                    RTCritSectEnter(&pDisk->CritSect);
    26292631                }
    26302632
     
    26672669                            && ASMAtomicCmpXchgBool(&pIoCtxWait->fComplete, true, false))
    26682670                        {
     2671                            RTCritSectLeave(&pDisk->CritSect);
    26692672                            LogFlowFunc(("Waiting I/O context completed pIoCtxWait=%#p\n", pIoCtxWait));
    26702673                            vdThreadFinishWrite(pDisk);
     
    26732676                                                              pIoCtxWait->rcReq);
    26742677                            vdIoCtxFree(pDisk, pIoCtxWait);
     2678                            RTCritSectEnter(&pDisk->CritSect);
    26752679                        }
    26762680                    } while (!RTListIsEmpty(&ListTmp));
     
    26952699
    26962700                LogFlowFunc(("I/O context completed pIoCtx=%#p rcReq=%Rrc\n", pIoCtx, pIoCtx->rcReq));
     2701                RTCritSectLeave(&pDisk->CritSect);
    26972702                pIoCtx->Type.Root.pfnComplete(pIoCtx->Type.Root.pvUser1,
    26982703                                              pIoCtx->Type.Root.pvUser2,
    26992704                                              pIoCtx->rcReq);
     2705                RTCritSectEnter(&pDisk->CritSect);
    27002706            }
    27012707
     
    34953501        pIoCtx->pfnIoCtxTransfer = NULL;
    34963502
     3503    vdIoCtxContinue(pIoCtx, rcReq);
     3504
    34973505    rc = RTCritSectLeave(&pDisk->CritSect);
    34983506    AssertRC(rc);
    3499 
    3500     vdIoCtxContinue(pIoCtx, rcReq);
    35013507}
    35023508
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