- Timestamp:
- Aug 23, 2021 8:26:08 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Storage/VD.cpp
r90816 r90817 8431 8431 VBOXDDU_DECL(bool) VDIsReadOnly(PVDISK pDisk) 8432 8432 { 8433 bool fReadOnly;8434 int rc2;8435 bool fLockRead = false;8436 8437 8433 LogFlowFunc(("pDisk=%#p\n", pDisk)); 8438 do 8439 { 8440 /* sanity check */ 8441 AssertPtrBreakStmt(pDisk, fReadOnly = false); 8442 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 8443 8444 rc2 = vdThreadStartRead(pDisk); 8445 AssertRC(rc2); 8446 fLockRead = true; 8447 8448 PVDIMAGE pImage = pDisk->pLast; 8449 AssertPtrBreakStmt(pImage, fReadOnly = true); 8450 8451 unsigned uOpenFlags; 8452 uOpenFlags = pDisk->pLast->Backend->pfnGetOpenFlags(pDisk->pLast->pBackendData); 8434 /* sanity check */ 8435 AssertPtrReturn(pDisk, true); 8436 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 8437 8438 int rc2 = vdThreadStartRead(pDisk); 8439 AssertRC(rc2); 8440 8441 bool fReadOnly = true; 8442 PVDIMAGE pImage = pDisk->pLast; 8443 AssertPtr(pImage); 8444 if (pImage) 8445 { 8446 unsigned uOpenFlags = pDisk->pLast->Backend->pfnGetOpenFlags(pDisk->pLast->pBackendData); 8453 8447 fReadOnly = !!(uOpenFlags & VD_OPEN_FLAGS_READONLY); 8454 } while (0); 8455 8456 if (RT_UNLIKELY(fLockRead)) 8457 { 8458 rc2 = vdThreadFinishRead(pDisk); 8459 AssertRC(rc2); 8460 } 8448 } 8449 8450 rc2 = vdThreadFinishRead(pDisk); 8451 AssertRC(rc2); 8461 8452 8462 8453 LogFlowFunc(("returns %d\n", fReadOnly)); … … 8467 8458 VBOXDDU_DECL(uint32_t) VDGetSectorSize(PVDISK pDisk, unsigned nImage) 8468 8459 { 8469 uint64_t cbSector;8470 int rc2;8471 bool fLockRead = false;8472 8473 8460 LogFlowFunc(("pDisk=%#p nImage=%u\n", pDisk, nImage)); 8474 do8475 {8476 /* sanity check */8477 AssertPtrBreakStmt(pDisk, cbSector = 0); 8478 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature));8479 8480 rc2 = vdThreadStartRead(pDisk);8481 AssertRC(rc2); 8482 fLockRead = true;8483 8484 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage);8485 AssertPtrBreakStmt(pImage, cbSector = 0);8486 8461 /* sanity check */ 8462 AssertPtrReturn(pDisk, 0); 8463 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 8464 8465 /* Do the job. */ 8466 int rc2 = vdThreadStartRead(pDisk); 8467 AssertRC(rc2); 8468 8469 uint64_t cbSector = 0; 8470 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 8471 AssertPtr(pImage); 8472 if (pImage) 8473 { 8487 8474 PCVDREGIONLIST pRegionList = NULL; 8488 8475 int rc = pImage->Backend->pfnQueryRegions(pImage->pBackendData, &pRegionList); 8489 8476 if (RT_SUCCESS(rc)) 8490 8477 { 8491 AssertBreakStmt(pRegionList->cRegions == 1, cbSector = 0); 8492 cbSector = pRegionList->aRegions[0].cbBlock; 8493 8494 AssertPtr(pImage->Backend->pfnRegionListRelease); 8495 pImage->Backend->pfnRegionListRelease(pImage->pBackendData, pRegionList); 8496 } 8497 else 8498 cbSector = 0; 8499 } while (0); 8500 8501 if (RT_UNLIKELY(fLockRead)) 8502 { 8503 rc2 = vdThreadFinishRead(pDisk); 8504 AssertRC(rc2); 8505 } 8478 AssertMsg(pRegionList->cRegions == 1, ("%u\n", pRegionList->cRegions)); 8479 if (pRegionList->cRegions == 1) 8480 { 8481 cbSector = pRegionList->aRegions[0].cbBlock; 8482 8483 AssertPtr(pImage->Backend->pfnRegionListRelease); 8484 pImage->Backend->pfnRegionListRelease(pImage->pBackendData, pRegionList); 8485 } 8486 } 8487 } 8488 8489 rc2 = vdThreadFinishRead(pDisk); 8490 AssertRC(rc2); 8506 8491 8507 8492 LogFlowFunc(("returns %u\n", cbSector)); … … 8514 8499 LogFlowFunc(("pDisk=%#p nImage=%u\n", pDisk, nImage)); 8515 8500 /* sanity check */ 8516 AssertPtrReturn(pDisk, VERR_INVALID_POINTER);8501 AssertPtrReturn(pDisk, 0); 8517 8502 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 8518 8503
Note:
See TracChangeset
for help on using the changeset viewer.