VirtualBox

Ignore:
Timestamp:
Apr 27, 2010 2:05:25 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
60746
Message:

IntNet,VBoxNetFlt: Cleaned up the locking protocol between IntNet and NetFlt. Eleminated the out-bound trunk lock that IntNet always took when calling NetFlt.

Location:
trunk/src/VBox/HostDrivers/VBoxNetFlt/win
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFlt-win.c

    r28800 r28830  
    11121112
    11131113    /* using the pPacketQueueSG as an indicator that the packet queue is initialized */
    1114     RTSpinlockAcquire((pInstance)->hSpinlock, &Tmp);
     1114    RTSpinlockAcquireNoInts((pInstance)->hSpinlock, &Tmp);
    11151115    if(pWorker->pSG)
    11161116    {
    11171117        pSG = pWorker->pSG;
    11181118        pWorker->pSG = NULL;
    1119         RTSpinlockRelease((pInstance)->hSpinlock, &Tmp);
     1119        RTSpinlockReleaseNoInts((pInstance)->hSpinlock, &Tmp);
    11201120        KeSetEvent(&pWorker->KillEvent, 0, FALSE);
    11211121
     
    11311131    else
    11321132    {
    1133         RTSpinlockRelease((pInstance)->hSpinlock, &Tmp);
     1133        RTSpinlockReleaseNoInts((pInstance)->hSpinlock, &Tmp);
    11341134    }
    11351135}
     
    30233023    Assert(pThis->fDisconnectedFromHost);
    30243024    Assert(!pThis->fRediscoveryPending);
    3025     Assert(!pThis->fActive);
     3025    Assert(pThis->enmTrunkState != INTNETTRUNKIFSTATE_ACTIVE);
    30263026#ifndef VBOXNETADP
    30273027    Assert(pAdapt->PTState.OpState == kVBoxNetDevOpState_Deinitialized);
     
    32553255//#endif
    32563256
    3257                             RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
    32583257
    32593258                            /* 4. mark as connected */
     3259                            RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    32603260                            ASMAtomicUoWriteBool(&pThis->fDisconnectedFromHost, false);
    3261 
    3262                             RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     3261                            RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    32633262
    32643263                            pAttachInfo->Status = VINF_SUCCESS;
     
    32713270                            /* 5. Report MAC address, promiscuousness and GSO capabilities. */
    32723271                            /** @todo Keep these up to date, esp. the promiscuous mode bit. */
    3273                             if (pThis->pSwitchPort)
     3272                            if (   pThis->pSwitchPort
     3273                                && vboxNetFltTryRetainBusyNotDisconnected(pThis))
    32743274                            {
    32753275                                pThis->pSwitchPort->pfnReportMacAddress(pThis->pSwitchPort, &pThis->u.s.MacAddr);
     
    32803280                                /** @todo We should be able to do pfnXmit at DISPATCH_LEVEL... */
    32813281                                pThis->pSwitchPort->pfnReportNoPreemptDsts(pThis->pSwitchPort, 0 /* none */);
     3282                                vboxNetFltRelease(pThis, true /*fBusy*/);
    32823283                            }
    32833284                            return;
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFlt-win.h

    r28800 r28830  
    636636    pNetFlt = PADAPT_2_PVBOXNETFLTINS(pAdapt);
    637637
    638     RTSpinlockAcquire((pNetFlt)->hSpinlock, &Tmp);
    639     if(!ASMAtomicUoReadBool(&(pNetFlt)->fActive))
    640     {
    641         RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     638    RTSpinlockAcquireNoInts((pNetFlt)->hSpinlock, &Tmp);
     639    if(pNetFlt->enmTrunkState != INTNETTRUNKIFSTATE_ACTIVE)
     640    {
     641        RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    642642        return NULL;
    643643    }
     
    645645    if(!vboxNetFltWinDoReferenceDevice(pAdapt, &pAdapt->PTState))
    646646    {
    647         RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     647        RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    648648        return NULL;
    649649    }
     
    651651    vboxNetFltRetain((pNetFlt), true /* fBusy */);
    652652
    653     RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     653    RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    654654
    655655    return pNetFlt;
     
    660660    RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    661661
    662     RTSpinlockAcquire((pNetFlt)->hSpinlock, &Tmp);
     662    RTSpinlockAcquireNoInts((pNetFlt)->hSpinlock, &Tmp);
    663663#ifndef VBOXNETADP
    664664    if(!vboxNetFltWinDoReferenceDevices(pAdapt, &pAdapt->MPState, &pAdapt->PTState))
     
    667667#endif
    668668    {
    669         RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     669        RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    670670        *pbNetFltActive = false;
    671671        return false;
    672672    }
    673673
    674     if(!ASMAtomicUoReadBool(&(pNetFlt)->fActive))
     674    if(pNetFlt->enmTrunkState != INTNETTRUNKIFSTATE_ACTIVE)
    675675    {
    676676        vboxNetFltWinReferenceModePassThru(pNetFlt);
    677         RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     677        RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    678678        *pbNetFltActive = false;
    679679        return true;
     
    682682    vboxNetFltRetain((pNetFlt), true /* fBusy */);
    683683    vboxNetFltWinReferenceModeNetFlt(pNetFlt);
    684     RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     684    RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    685685
    686686    *pbNetFltActive = true;
     
    704704    pNetFlt = PADAPT_2_PVBOXNETFLTINS(pAdapt);
    705705
    706     RTSpinlockAcquire((pNetFlt)->hSpinlock, &Tmp);
    707     if(!ASMAtomicUoReadBool(&(pNetFlt)->fActive))
    708     {
    709         RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     706    RTSpinlockAcquireNoInts((pNetFlt)->hSpinlock, &Tmp);
     707    if(pNetFlt->enmTrunkState != INTNETTRUNKIFSTATE_ACTIVE)
     708    {
     709        RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    710710        return NULL;
    711711    }
     
    713713    if(!vboxNetFltWinDoIncReferenceDevice(pAdapt, &pAdapt->PTState, v))
    714714    {
    715         RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     715        RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    716716        return NULL;
    717717    }
     
    719719    vboxNetFltRetain((pNetFlt), true /* fBusy */);
    720720
    721     RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     721    RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    722722
    723723    /* we have marked it as busy, so can do the res references outside the lock */
     
    742742    }
    743743
    744     RTSpinlockAcquire((pNetFlt)->hSpinlock, &Tmp);
     744    RTSpinlockAcquireNoInts((pNetFlt)->hSpinlock, &Tmp);
    745745#ifndef VBOXNETADP
    746746    if(!vboxNetFltWinDoIncReferenceDevices(pAdapt, &pAdapt->MPState, &pAdapt->PTState, v))
     
    749749#endif
    750750    {
    751         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     751        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    752752        *pbNetFltActive = false;
    753753        return false;
    754754    }
    755755
    756     if(!ASMAtomicUoReadBool(&(pNetFlt)->fActive))
     756    if(pNetFlt->enmTrunkState != INTNETTRUNKIFSTATE_ACTIVE)
    757757    {
    758758        vboxNetFltWinIncReferenceModePassThru(pNetFlt, v);
    759759
    760         RTSpinlockRelease((pNetFlt)->hSpinlock, &Tmp);
     760        RTSpinlockReleaseNoInts((pNetFlt)->hSpinlock, &Tmp);
    761761        *pbNetFltActive = false;
    762762        return true;
     
    767767    vboxNetFltWinIncReferenceModeNetFlt(pNetFlt, v);
    768768
    769     RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     769    RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    770770
    771771    /* we have marked it as busy, so can do the res references outside the lock */
     
    833833    }
    834834
    835     RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     835    RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    836836#ifdef VBOX_NETFLT_ONDEMAND_BIND
    837837    if(vboxNetFltWinDoIncReferenceDevice(pAdapt, &pAdapt->PTState))
     
    842842#endif
    843843    {
    844         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     844        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    845845        return true;
    846846    }
    847847
    848     RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     848    RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    849849    return false;
    850850}
     
    854854    PVBOXNETFLTINS pNetFlt = PADAPT_2_PVBOXNETFLTINS(pAdapt);
    855855    RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    856     RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     856    RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    857857#ifdef VBOX_NETFLT_ONDEMAND_BIND
    858858    if(vboxNetFltWinDoReferenceDevice(pAdapt, &pAdapt->PTState))
     
    863863#endif
    864864    {
    865         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     865        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    866866        return true;
    867867    }
    868868
    869     RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     869    RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    870870    return false;
    871871}
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltMp-win.c

    r28800 r28830  
    486486     * fail any request comming later
    487487     */
    488     RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     488    RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    489489
    490490    ASMAtomicUoWriteBool(&pNetFlt->fDisconnectedFromHost, true);
     
    494494    vboxNetFltWinSetOpState(&pAdapt->MPState, kVBoxNetDevOpState_Deinitializing);
    495495
    496     RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     496    RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    497497
    498498    vboxNetFltWinWaitDereference(&pAdapt->MPState);
     
    10011001         * If the miniport below is binding, fail the request
    10021002         */
    1003         RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     1003        RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    10041004
    10051005        if (vboxNetFltWinGetOpState(&pAdapt->PTState) > kVBoxNetDevOpState_Initialized)
    10061006        {
    1007             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1007            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    10081008            Status = NDIS_STATUS_FAILURE;
    10091009            break;
     
    10171017        {
    10181018            pAdapt->bQueuedRequest = TRUE;
    1019             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1019            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    10201020            Status = NDIS_STATUS_PENDING;
    10211021            break;
     
    10261026        if (pAdapt->bStandingBy == TRUE)
    10271027        {
    1028             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1028            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    10291029            Status = NDIS_STATUS_FAILURE;
    10301030            break;
     
    10321032        pAdapt->bOutstandingRequests = TRUE;
    10331033
    1034         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1034        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    10351035        if(Oid == OID_GEN_CURRENT_PACKET_FILTER && VBOXNETFLT_PROMISCUOUS_SUPPORTED(pAdapt))
    10361036        {
     
    10501050                vboxNetFltWinDereferenceAdapt(pAdapt);
    10511051
    1052                 RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     1052                RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    10531053                pAdapt->bOutstandingRequests = FALSE;
    1054                 RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1054                RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    10551055                break;
    10561056            }
     
    13461346         * If the miniport below is unbinding, fail the request
    13471347         */
    1348         RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     1348        RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    13491349        if (vboxNetFltWinGetOpState(&pAdapt->PTState) > kVBoxNetDevOpState_Initialized)
    13501350        {
    1351             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1351            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    13521352            Status = NDIS_STATUS_FAILURE;
    13531353            break;
     
    13621362        {
    13631363            pAdapt->bQueuedRequest = TRUE;
    1364             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1364            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    13651365            Status = NDIS_STATUS_PENDING;
    13661366            break;
     
    13711371        if (pAdapt->bStandingBy == TRUE)
    13721372        {
    1373             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1373            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    13741374            Status = NDIS_STATUS_FAILURE;
    13751375            break;
     
    13771377        pAdapt->bOutstandingRequests = TRUE;
    13781378
    1379         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1379        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    13801380
    13811381        if(Oid == OID_GEN_CURRENT_PACKET_FILTER && VBOXNETFLT_PROMISCUOUS_SUPPORTED(pAdapt))
     
    14131413                    vboxNetFltWinDereferenceAdapt(pAdapt);
    14141414
    1415                     RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     1415                    RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    14161416                    pAdapt->bOutstandingRequests = FALSE;
    1417                     RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1417                    RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    14181418                    break;
    14191419                }
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c

    r28800 r28830  
    299299     * fail any request comming later
    300300     */
    301     RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     301    RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    302302
    303303    ASMAtomicUoWriteBool(&pNetFlt->fDisconnectedFromHost, true);
     
    332332
    333333
    334     RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     334    RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    335335
    336336    if (CompleteRequest == TRUE)
     
    583583            {
    584584                PVBOXNETFLTINS pNetFltIf = PADAPT_2_PVBOXNETFLTINS(pAdapt);
    585                 Assert(!pNetFltIf->fActive);
     585                Assert(pNetFltIf->enmTrunkState != INTNETTRUNKIFSTATE_ACTIVE);
    586586                vboxNetFltWinDereferenceModePassThru(pNetFltIf);
    587587                vboxNetFltWinDereferenceAdapt(pAdapt);
     
    613613              if(pAdapt->fProcessingPacketFilter == VBOXNETFLT_PFP_NETFLT)
    614614              {
    615                   Assert(pNetFltIf->fActive);
     615                  Assert(pNetFltIf->enmTrunkState == INTNETTRUNKIFSTATE_ACTIVE);
    616616                  if(Status == NDIS_STATUS_SUCCESS)
    617617                  {
     
    625625              else if(pAdapt->fProcessingPacketFilter == VBOXNETFLT_PFP_PASSTHRU)
    626626              {
    627                   Assert(!pNetFltIf->fActive);
     627                  Assert(pNetFltIf->enmTrunkState != INTNETTRUNKIFSTATE_ACTIVE);
    628628
    629629                  if(Status == NDIS_STATUS_SUCCESS)
     
    849849    Assert(KeGetCurrentIrql() == DISPATCH_LEVEL);
    850850    do{
    851         RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     851        RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    852852
    853853        Assert(pAdapt->cReceivedPacketCount < MAX_RECEIVE_PACKET_ARRAY_SIZE);
     
    893893            }
    894894        }
    895         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     895        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    896896    } while(0);
    897897
     
    10891089    do
    10901090    {
    1091         RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     1091        RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    10921092
    10931093        if (pAdapt->cReceivedPacketCount > 0)
     
    11031103            pAdapt->cReceivedPacketCount = 0;
    11041104
    1105             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1105            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    11061106
    11071107            if(!bReturn)
     
    11321132
    11331133        /* we are here only in case pAdapt->cReceivedPacketCount == 0 */
    1134         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     1134        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    11351135    } while (FALSE);
    11361136}
     
    21122112    RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    21132113
    2114     RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     2114    RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    21152115
    21162116    if(pAdapt->bClosingAdapter)
    21172117    {
    2118         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2118        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    21192119        Assert(0);
    21202120        return false;
     
    21222122    if (pAdapt->hBindingHandle == NULL)
    21232123    {
    2124         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2124        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    21252125        Assert(0);
    21262126        return false;
     
    21282128
    21292129    pAdapt->bClosingAdapter = true;
    2130     RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2130    RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    21312131
    21322132    /*
     
    21772177     * Set the Internal Device State, this blocks all new sends or receives
    21782178     */
    2179     RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     2179    RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    21802180
    21812181    vboxNetFltWinSetPowerState(&pAdapt->PTState, *pDeviceState);
     
    21932193            pAdapt->bStandingBy = TRUE;
    21942194        }
    2195         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2195        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    21962196#ifndef VBOX_NETFLT_ONDEMAND_BIND
    21972197
     
    22182218         * If the below miniport is going to low power state, complete the queued request
    22192219         */
    2220         RTSpinlockAcquire(pNetFlt->hSpinlock, &Tmp);
     2220        RTSpinlockAcquireNoInts(pNetFlt->hSpinlock, &Tmp);
    22212221        if (pAdapt->bQueuedRequest)
    22222222        {
    22232223            pAdapt->bQueuedRequest = FALSE;
    2224             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2224            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    22252225            vboxNetFltWinPtRequestComplete(pAdapt, &pAdapt->Request, NDIS_STATUS_FAILURE);
    22262226        }
    22272227        else
    22282228        {
    2229             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2229            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    22302230        }
    22312231#endif
     
    22552255
    22562256#ifdef VBOX_NETFLT_ONDEMAND_BIND
    2257         RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2257        RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    22582258#else
    22592259        /*
     
    22682268
    22692269            pAdapt->bOutstandingRequests = TRUE;
    2270             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2270            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    22712271
    22722272            NdisRequest(&Status,
     
    22842284        else
    22852285        {
    2286             RTSpinlockRelease(pNetFlt->hSpinlock, &Tmp);
     2286            RTSpinlockReleaseNoInts(pNetFlt->hSpinlock, &Tmp);
    22872287        }
    22882288
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