VirtualBox

Changeset 22252 in vbox


Ignore:
Timestamp:
Aug 14, 2009 8:31:12 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
51066
Message:

NAT: polling + counter wakeup counter in NATRx

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DrvNAT.cpp

    r22251 r22252  
    172172    RTSEMEVENT              semNATRx;
    173173    bool                    fCanOutput;
     174    STAMCOUNTER             StatNATRxWakeups;
    174175#endif
    175176} DRVNAT;
     
    185186    while (pThread->enmState == PDMTHREADSTATE_RUNNING)
    186187    {
    187         int rc = pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, 0);
    188         bool fHaveRxBuffers = RT_SUCCESS(rc);
     188        int rc;
     189        bool fHaveRxBuffers;
     190        do {
     191            rc = pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, 0);
     192            fHaveRxBuffers = RT_SUCCESS(rc);
     193            if (!fHaveRxBuffers) RTThreadSleep(2);
     194        } while (!fHaveRxBuffers && pThread->enmState == PDMTHREADSTATE_RUNNING);
    189195
    190196        if (!pThis->fCanOutput && fHaveRxBuffers)
     
    214220    PDRVNAT pThis = PDMINS_2_DATA(pDrvIns, PDRVNAT);
    215221    int rc = RTSemEventSignal(pThis->semNATRx);
     222    STAM_COUNTER_INC(&pThis->StatNATRxWakeups);
    216223    AssertReleaseRC(rc);
    217224    return VINF_SUCCESS;
     
    532539#endif /* RT_OS_WINDOWS */
    533540#ifdef SLIRP_SPLIT_CAN_OUTPUT
    534         drvNATRxWakeup(pThis->pDrvIns, pThis->thrNATRx);
     541        if (!pThis->fCanOutput)
     542            drvNATRxWakeup(pThis->pDrvIns, pThis->thrNATRx);
    535543#endif
    536544    }
     
    596604{
    597605#ifdef SLIRP_SPLIT_CAN_OUTPUT
     606   PDRVNAT pThis = (PDRVNAT)pvUser;
    598607   return pThis->fCanOutput;
    599608#else
     
    662671    if (RT_FAILURE(pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, 0)))
    663672    {
     673        STAM_COUNTER_INC(&pThis->StatConsumerFalse);
     674        return false;
     675    }
     676#else
     677    if (RT_FAILURE(pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, 0)))
     678    {
     679        drvNATRxWakeup(pThis->pDrvIns, pThis->thrNATRx);
    664680        STAM_COUNTER_INC(&pThis->StatConsumerFalse);
    665681        return false;
     
    971987                              STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, "counting PDM consumer false"
    972988                              " queue", "/Drivers/NAT%u/PDMConsumerFalse", pDrvIns->iInstance);
     989# ifdef SLIRP_SPLIT_CAN_OUTPUT
     990        PDMDrvHlpSTAMRegisterF(pDrvIns, &pThis->StatNATRxWakeups, STAMTYPE_COUNTER,
     991                              STAMVISIBILITY_ALWAYS, STAMUNIT_COUNT, "counting wakeups of NATRX"
     992                              " thread", "/Drivers/NAT%u/NATRxWakeups", pDrvIns->iInstance);
     993# endif
    973994#endif
    974995
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