VirtualBox

Changeset 66653 in vbox for trunk


Ignore:
Timestamp:
Apr 24, 2017 12:12:22 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115019
Message:

PDMAsyncCompletionFile: Remember how many bytes where already transfered to properly restart incomplete requests at the right point (ticketref:16677)

Location:
trunk/src/VBox/VMM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp

    r63560 r66653  
    14651465             * the transfer needs to be continued.
    14661466             */
    1467             if (RT_UNLIKELY(   cbTransfered < pTask->DataSeg.cbSeg
     1467            pTask->cbTransfered += cbTransfered;
     1468
     1469            if (RT_UNLIKELY(   pTask->cbTransfered < pTask->DataSeg.cbSeg
    14681470                            || (   pTask->cbBounceBuffer
    1469                                 && cbTransfered < pTask->cbBounceBuffer)))
     1471                                && pTask->cbTransfered < pTask->cbBounceBuffer)))
    14701472            {
    14711473                RTFOFF offStart;
     
    14801482                {
    14811483                    AssertPtr(pTask->pvBounceBuffer);
    1482                     offStart     = (pTask->Off & ~((RTFOFF)512-1)) + cbTransfered;
    1483                     cbToTransfer = pTask->cbBounceBuffer - cbTransfered;
    1484                     pbBuf        = (uint8_t *)pTask->pvBounceBuffer + cbTransfered;
     1484                    offStart     = (pTask->Off & ~((RTFOFF)512-1)) + pTask->cbTransfered;
     1485                    cbToTransfer = pTask->cbBounceBuffer - pTask->cbTransfered;
     1486                    pbBuf        = (uint8_t *)pTask->pvBounceBuffer + pTask->cbTransfered;
    14851487                }
    14861488                else
    14871489                {
    14881490                    Assert(!pTask->pvBounceBuffer);
    1489                     offStart     = pTask->Off + cbTransfered;
    1490                     cbToTransfer = pTask->DataSeg.cbSeg - cbTransfered;
    1491                     pbBuf        = (uint8_t *)pTask->DataSeg.pvSeg + cbTransfered;
     1491                    offStart     = pTask->Off + pTask->cbTransfered;
     1492                    cbToTransfer = pTask->DataSeg.cbSeg - pTask->cbTransfered;
     1493                    pbBuf        = (uint8_t *)pTask->DataSeg.pvSeg + pTask->cbTransfered;
    14921494                }
    14931495
     
    15241526                RTFOFF offStart = pTask->Off & ~(RTFOFF)(512-1);
    15251527                size_t cbToTransfer = RT_ALIGN_Z(pTask->DataSeg.cbSeg + (pTask->Off - offStart), 512);
     1528
     1529                pTask->cbTransfered = 0;
    15261530
    15271531                /* Grow the file if needed. */
  • trunk/src/VBox/VMM/include/PDMAsyncCompletionFileInternal.h

    r62478 r66653  
    484484    /** Start offset */
    485485    RTFOFF                               Off;
     486    /** Amount of data transfered so far. */
     487    size_t                               cbTransfered;
    486488    /** Data segment. */
    487489    RTSGSEG                              DataSeg;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette