VirtualBox

Changeset 38409 in vbox


Ignore:
Timestamp:
Aug 11, 2011 8:29:43 AM (13 years ago)
Author:
vboxsync
Message:

VD: Fix a possible deadlock if the block cache is enabled

File:
1 edited

Legend:

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

    r38203 r38409  
    27632763    int rc = VINF_SUCCESS;
    27642764
     2765    VD_THREAD_IS_CRITSECT_OWNER(pDisk);
     2766
    27652767    if (RT_FAILURE(rcReq))
    27662768        ASMAtomicCmpXchgS32(&pIoCtx->rcReq, rcReq, VINF_SUCCESS);
     
    28202822
    28212823                /* Process any pending writes if the current request didn't caused another growing. */
    2822                 RTCritSectEnter(&pDisk->CritSect);
    2823 
    28242824                if (   !RTListIsEmpty(&pDisk->ListWriteLocked)
    28252825                    && !vdIoCtxIsDiskLockOwner(pDisk, pIoCtx))
     
    28572857                            && ASMAtomicCmpXchgBool(&pIoCtxWait->fComplete, true, false))
    28582858                        {
    2859                             RTCritSectLeave(&pDisk->CritSect);
    28602859                            LogFlowFunc(("Waiting I/O context completed pIoCtxWait=%#p\n", pIoCtxWait));
    28612860                            vdThreadFinishWrite(pDisk);
     
    28642863                                                              pIoCtxWait->rcReq);
    28652864                            vdIoCtxFree(pDisk, pIoCtxWait);
    2866                             RTCritSectEnter(&pDisk->CritSect);
    28672865                        }
    28682866                    } while (!RTListIsEmpty(&ListTmp));
     2867
     2868                    RTCritSectEnter(&pDisk->CritSect);
    28692869                }
    2870                 else
    2871                     RTCritSectLeave(&pDisk->CritSect);
    28722870            }
    28732871            else
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