Changeset 42335 in vbox for trunk/src/VBox
- Timestamp:
- Jul 23, 2012 8:45:03 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 79410
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/SSM.cpp
r41965 r42335 465 465 /** Number of compressed bytes left in the current data unit (V1). */ 466 466 uint64_t cbUnitLeftV1; 467 /** The current uncompressedoffset into the data unit. */467 /** The current compressed? offset into the data unit. */ 468 468 uint64_t offUnit; 469 /** The current user data offset into the unit (debug purposes). */ 470 uint64_t offUnitUser; 469 471 /** Indicates that this is a live save or restore operation. */ 470 472 bool fLiveSave; … … 3068 3070 if (RT_SUCCESS(rc)) 3069 3071 { 3070 pSSM->offUnit = UINT64_MAX; 3072 pSSM->offUnit = UINT64_MAX; 3073 pSSM->offUnitUser = UINT64_MAX; 3071 3074 return VINF_SUCCESS; 3072 3075 } … … 3088 3091 static void ssmR3DataWriteBegin(PSSMHANDLE pSSM) 3089 3092 { 3090 pSSM->offUnit = 0; 3093 pSSM->offUnit = 0; 3094 pSSM->offUnitUser = 0; 3091 3095 } 3092 3096 … … 3239 3243 if (RT_SUCCESS(rc)) 3240 3244 { 3245 pSSM->offUnitUser += cbBuf; 3246 3241 3247 /* 3242 3248 * Split it up into compression blocks. … … 3347 3353 memcpy(&pSSM->u.Write.abDataBuffer[0], pvBuf, cbBuf); 3348 3354 pSSM->u.Write.offDataBuffer = (uint32_t)cbBuf; 3355 pSSM->offUnitUser += cbBuf; 3349 3356 } 3350 3357 return rc; … … 3376 3383 memcpy(&pSSM->u.Write.abDataBuffer[off], pvBuf, cbBuf); 3377 3384 pSSM->u.Write.offDataBuffer = off + (uint32_t)cbBuf; 3385 pSSM->offUnitUser += cbBuf; 3378 3386 return VINF_SUCCESS; 3379 3387 } … … 4868 4876 pSSM->cbUnitLeftV1 = 0; 4869 4877 pSSM->offUnit = UINT64_MAX; 4878 pSSM->offUnitUser = UINT64_MAX; 4870 4879 pSSM->fLiveSave = false; 4871 4880 pSSM->pfnProgress = pfnProgress; … … 5599 5608 { 5600 5609 Log2(("ssmR3DataRead: pvBuf=%p cbBuf=%#x offUnit=%#llx %.*Rhxs%s\n", pvBuf, cbBuf, pSSM->offUnit, RT_MIN(cbBuf, SSM_LOG_BYTES), pvBuf, cbBuf > SSM_LOG_BYTES ? "..." : "")); 5601 pSSM->offUnit += cbBuf; 5610 pSSM->offUnit += cbBuf; 5611 pSSM->offUnitUser += cbBuf; 5602 5612 return VINF_SUCCESS; 5603 5613 } … … 5619 5629 Assert(!pSSM->u.Read.cbRecLeft); 5620 5630 5621 pSSM->offUnit = 0; 5631 pSSM->offUnit = 0; 5632 pSSM->offUnitUser = 0; 5622 5633 pSSM->u.Read.cbRecLeft = 0; 5623 5634 pSSM->u.Read.cbDataBuffer = 0; … … 5648 5659 if ( pSSM->u.Read.cbDataBuffer != pSSM->u.Read.offDataBuffer 5649 5660 && pSSM->u.Read.cbDataBuffer > 0) 5661 { 5662 LogRel(("SSM: At least %#x bytes left to read\n", pSSM->u.Read.cbDataBuffer - pSSM->u.Read.offDataBuffer)); 5650 5663 rc = VERR_SSM_LOADED_TOO_LITTLE; 5664 } 5651 5665 else 5652 5666 { … … 5655 5669 && !pSSM->u.Read.fEndOfData) 5656 5670 { 5671 LogRel(("SSM: At least %#x bytes left to read\n", pSSM->u.Read.cbDataBuffer)); 5657 5672 rc = VERR_SSM_LOADED_TOO_LITTLE; 5658 5673 AssertFailed(); … … 5667 5682 5668 5683 /** 5669 * Read r eader that keep worksthe progress indicator and unit offset.5684 * Read raw record bytes, work the progress indicator and unit offset. 5670 5685 * 5671 5686 * @returns VBox status code. Does NOT set pSSM->rc. … … 6078 6093 } 6079 6094 6095 pSSM->offUnitUser += cbToRead; 6080 6096 cbBuf -= cbToRead; 6081 6097 pvBuf = (uint8_t *)pvBuf + cbToRead; … … 6115 6131 pvBuf = (uint8_t *)pvBuf + cbToCopy; 6116 6132 cbBuf -= cbToCopy; 6133 pSSM->offUnitUser += cbToCopy; 6117 6134 pSSM->u.Read.cbDataBuffer = 0; 6118 6135 pSSM->u.Read.offDataBuffer = 0; … … 6187 6204 cbBuf -= cbToCopy; 6188 6205 pvBuf = (uint8_t *)pvBuf + cbToCopy; 6206 pSSM->offUnitUser += cbToCopy; 6189 6207 pSSM->u.Read.offDataBuffer = cbToCopy; 6190 6208 } while (cbBuf > 0); … … 6228 6246 memcpy(pvBuf, &pSSM->u.Read.abDataBuffer[off], cbBuf); 6229 6247 pSSM->u.Read.offDataBuffer = off + (uint32_t)cbBuf; 6248 pSSM->offUnitUser += cbBuf; 6230 6249 Log4((cbBuf 6231 6250 ? "ssmR3DataRead: %08llx|%08llx/%08x/%08x: cbBuf=%#x %.*Rhxs%s\n" … … 7680 7699 pSSM->cbUnitLeftV1 = 0; 7681 7700 pSSM->offUnit = UINT64_MAX; 7701 pSSM->offUnitUser = UINT64_MAX; 7682 7702 pSSM->fLiveSave = false; 7683 7703 pSSM->pfnProgress = NULL; … … 7878 7898 */ 7879 7899 pSSM->cbUnitLeftV1 = UnitHdr.cbUnit - RT_OFFSETOF(SSMFILEUNITHDRV1, szName[UnitHdr.cchName]); 7880 pSSM->offUnit = 0; 7900 pSSM->offUnit = 0; 7901 pSSM->offUnitUser = 0; 7881 7902 pSSM->u.Read.uCurUnitVer = UnitHdr.u32Version; 7882 7903 pSSM->u.Read.uCurUnitPass = SSM_PASS_FINAL; … … 7940 7961 } 7941 7962 7942 pSSM->offUnit = UINT64_MAX; 7963 pSSM->offUnit = UINT64_MAX; 7964 pSSM->offUnitUser = UINT64_MAX; 7943 7965 } 7944 7966 else … … 8173 8195 rc = ssmR3DataReadFinishV2(pSSM); 8174 8196 if (RT_SUCCESS(rc)) 8175 pSSM->offUnit = UINT64_MAX; 8197 { 8198 pSSM->offUnit = UINT64_MAX; 8199 pSSM->offUnitUser = UINT64_MAX; 8200 } 8176 8201 else 8177 8202 { … … 8708 8733 rc = ssmR3StrmSeek(&pSSM->Strm, off + RT_OFFSETOF(SSMFILEUNITHDRV1, szName) + cbUnitNm, RTFILE_SEEK_BEGIN, 0); 8709 8734 pSSM->cbUnitLeftV1 = UnitHdr.cbUnit - RT_OFFSETOF(SSMFILEUNITHDRV1, szName[cbUnitNm]); 8710 pSSM->offUnit = 0; 8735 pSSM->offUnit = 0; 8736 pSSM->offUnitUser = 0; 8711 8737 if (piVersion) 8712 8738 *piVersion = UnitHdr.u32Version; … … 8891 8917 pSSM->cbUnitLeftV1 = 0; 8892 8918 pSSM->offUnit = UINT64_MAX; 8919 pSSM->offUnitUser = UINT64_MAX; 8893 8920 8894 8921 /*
Note:
See TracChangeset
for help on using the changeset viewer.