VirtualBox

Ticket #16677: le.2.patch

File le.2.patch, 7.5 KB (added by deletedgmailduetoJamesDamore_firing, 7 years ago)

does not hang AioMgr1-N anymore(see line with comment 'fix?')

  • PDMAsyncCompletionFileNormal.cpp

    old new static void pdmacFileAioMgrNormalReqComp  
    13381338{
    13391339    size_t cbTransfered = 0;
    13401340    int rcReq = RTFileAioReqGetRC(hReq, &cbTransfered);
     1341    LogRel(("1_1)cbTransfered=%zu rcReq=%d hReq=%p\n", cbTransfered, rcReq, hReq));
    13411342
    13421343    pdmacFileAioMgrNormalReqCompleteRc(pAioMgr, hReq, rcReq, cbTransfered);
    13431344}
    static void pdmacFileAioMgrNormalReqComp  
    13501351    PPDMACTASKFILE pTask = (PPDMACTASKFILE)RTFileAioReqGetUser(hReq);
    13511352    PPDMACTASKFILE pTasksWaiting;
    13521353
    1353     LogFlowFunc(("pAioMgr=%#p hReq=%#p\n", pAioMgr, hReq));
     1354    LogRel(("pAioMgr=%#p hReq=%#p failure=%d pTask->DataSeg.cbSeg=%zu\n", pAioMgr, hReq, RT_FAILURE(rcReq), pTask->DataSeg.cbSeg));
    13541355
    13551356    pEndpoint = pTask->pEndpoint;
    13561357
    static void pdmacFileAioMgrNormalReqComp  
    13801381
    13811382            pEndpoint->pFlushReq = NULL;
    13821383            /* Call completion callback */
    1383             LogFlow(("Flush task=%#p completed with %Rrc\n", pTask, VINF_SUCCESS));
     1384            LogRel(("Flush task=%#p completed with %Rrc\n", pTask, VINF_SUCCESS));
    13841385            pTask->pfnCompleted(pTask, pTask->pvUser, VINF_SUCCESS);
    13851386            pdmacFileTaskFree(pEndpoint, pTask);
    13861387        }
    static void pdmacFileAioMgrNormalReqComp  
    14521453            pdmacFileAioMgrNormalRequestFree(pAioMgr, hReq);
    14531454
    14541455            /* Call completion callback */
    1455             LogFlow(("Flush task=%#p completed with %Rrc\n", pTask, rcReq));
     1456            LogRel(("Flush task=%#p completed with %Rrc\n", pTask, rcReq));
    14561457            pTask->pfnCompleted(pTask, pTask->pvUser, rcReq);
    14571458            pdmacFileTaskFree(pEndpoint, pTask);
    14581459        }
    static void pdmacFileAioMgrNormalReqComp  
    14721473                size_t cbToTransfer;
    14731474                uint8_t *pbBuf = NULL;
    14741475
    1475                 LogFlow(("Restarting incomplete transfer %#p (%zu bytes transferred)\n",
    1476                          pTask, cbTransfered));
     1476                LogRel(("Restarting incomplete transfer %#p (%zu bytes transferred) pTask->DataSeg.cbSeg=%zu pTask->cbBounceBuffer=%zu\n",
     1477                         pTask, cbTransfered, pTask->DataSeg.cbSeg, pTask->cbBounceBuffer));
    14771478                Assert(cbTransfered % 512 == 0);
    14781479
    14791480                if (pTask->cbBounceBuffer)
    14801481                {
     1482                  LogRel(("Here1\n"));
    14811483                    AssertPtr(pTask->pvBounceBuffer);
    14821484                    offStart     = (pTask->Off & ~((RTFOFF)512-1)) + cbTransfered;
    14831485                    cbToTransfer = pTask->cbBounceBuffer - cbTransfered;
    static void pdmacFileAioMgrNormalReqComp  
    14851487                }
    14861488                else
    14871489                {
     1490                  LogRel(("Here2\n"));
    14881491                    Assert(!pTask->pvBounceBuffer);
    14891492                    offStart     = pTask->Off + cbTransfered;
    14901493                    cbToTransfer = pTask->DataSeg.cbSeg - cbTransfered;
     1494                    pTask->DataSeg.cbSeg = cbToTransfer;//fix?
    14911495                    pbBuf        = (uint8_t *)pTask->DataSeg.pvSeg + cbTransfered;
    14921496                }
    14931497
    14941498                if (pTask->fPrefetch || pTask->enmTransferType == PDMACTASKFILETRANSFER_READ)
    14951499                {
     1500                  LogRel(("Here3\n"));
    14961501                    rc = RTFileAioReqPrepareRead(hReq, pEndpoint->hFile, offStart,
    14971502                                                 pbBuf, cbToTransfer, pTask);
    14981503                }
    14991504                else
    15001505                {
     1506                  LogRel(("Here4\n"));
    15011507                    AssertMsg(pTask->enmTransferType == PDMACTASKFILETRANSFER_WRITE,
    15021508                                  ("Invalid transfer type\n"));
    15031509                    rc = RTFileAioReqPrepareWrite(hReq, pEndpoint->hFile, offStart,
    static void pdmacFileAioMgrNormalReqComp  
    15621568                }
    15631569
    15641570                /* Call completion callback */
    1565                 LogFlow(("Task=%#p completed with %Rrc\n", pTask, rcReq));
     1571                LogRel(("Task=%#p completed with %Rrc\n", pTask, rcReq));
    15661572                pTask->pfnCompleted(pTask, pTask->pvUser, rcReq);
    15671573                pdmacFileTaskFree(pEndpoint, pTask);
    15681574
    DECLCALLBACK(int) pdmacFileAioMgrNormal(  
    16181624    uint64_t        uMillisEnd  = RTTimeMilliTS() + PDMACEPFILEMGR_LOAD_UPDATE_PERIOD;
    16191625    NOREF(hThreadSelf);
    16201626
     1627    LogRel(("inside pdmacFileAioMgrNormal\n"));
    16211628    while (   pAioMgr->enmState == PDMACEPFILEMGRSTATE_RUNNING
    16221629           || pAioMgr->enmState == PDMACEPFILEMGRSTATE_SUSPENDING
    16231630           || pAioMgr->enmState == PDMACEPFILEMGRSTATE_GROWING)
    DECLCALLBACK(int) pdmacFileAioMgrNormal(  
    16481655            rc = pdmacFileAioMgrNormalCheckEndpoints(pAioMgr);
    16491656            CHECK_RC(pAioMgr, rc);
    16501657
     1658            LogRel(("before while %d\n", pAioMgr->cRequestsActive));
    16511659            while (pAioMgr->cRequestsActive)
    16521660            {
    16531661                RTFILEAIOREQ apReqs[20];
    16541662                uint32_t     cReqsCompleted = 0;
    16551663                size_t       cReqsWait;
     1664                LogRel(("0)reqsactive=%d\n", pAioMgr->cRequestsActive));
    16561665
    16571666                if (pAioMgr->cRequestsActive > RT_ELEMENTS(apReqs))
    16581667                    cReqsWait = RT_ELEMENTS(apReqs);
    16591668                else
    16601669                    cReqsWait = pAioMgr->cRequestsActive;
    16611670
    1662                 LogFlow(("Waiting for %d of %d tasks to complete\n", 1, cReqsWait));
     1671                LogRel(("Waiting for %d of %d tasks to complete\n", 1, cReqsWait));
    16631672
    16641673                rc = RTFileAioCtxWait(pAioMgr->hAioCtx,
    16651674                                      1,
    DECLCALLBACK(int) pdmacFileAioMgrNormal(  
    16681677                if (RT_FAILURE(rc) && (rc != VERR_INTERRUPTED))
    16691678                    CHECK_RC(pAioMgr, rc);
    16701679
    1671                 LogFlow(("%d tasks completed\n", cReqsCompleted));
     1680                LogRel(("%d tasks completed\n", cReqsCompleted));
     1681                LogRel(("1)reqsactive=%d\n", pAioMgr->cRequestsActive));
    16721682
    16731683                for (uint32_t i = 0; i < cReqsCompleted; i++)
    16741684                    pdmacFileAioMgrNormalReqComplete(pAioMgr, apReqs[i]);
     1685                LogRel(("2)reqsactive=%d\n", pAioMgr->cRequestsActive));
    16751686
    16761687                /* Check for an external blocking event before we go to sleep again. */
    16771688                if (pAioMgr->fBlockingEventPending)
    DECLCALLBACK(int) pdmacFileAioMgrNormal(  
    16791690                    rc = pdmacFileAioMgrNormalProcessBlockingEvent(pAioMgr);
    16801691                    CHECK_RC(pAioMgr, rc);
    16811692                }
     1693                LogRel(("3)reqsactive=%d\n", pAioMgr->cRequestsActive));
    16821694
    16831695                /* Update load statistics. */
    16841696                uint64_t uMillisCurr = RTTimeMilliTS();
    DECLCALLBACK(int) pdmacFileAioMgrNormal(  
    16991711                    /* Set new update interval */
    17001712                    uMillisEnd = RTTimeMilliTS() + PDMACEPFILEMGR_LOAD_UPDATE_PERIOD;
    17011713                }
     1714                LogRel(("4)reqsactive=%d\n", pAioMgr->cRequestsActive));
    17021715
    17031716                /* Check endpoints for new requests. */
    17041717                if (pAioMgr->enmState != PDMACEPFILEMGRSTATE_GROWING)
    DECLCALLBACK(int) pdmacFileAioMgrNormal(  
    17061719                    rc = pdmacFileAioMgrNormalCheckEndpoints(pAioMgr);
    17071720                    CHECK_RC(pAioMgr, rc);
    17081721                }
     1722                LogRel(("5)reqsactive=%d\n", pAioMgr->cRequestsActive));
    17091723            } /* while requests are active. */
     1724            LogRel(("after while\n"));
    17101725
    17111726            if (pAioMgr->enmState == PDMACEPFILEMGRSTATE_GROWING)
    17121727            {

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy