VirtualBox

Changeset 48989 in vbox


Ignore:
Timestamp:
Oct 9, 2013 7:05:31 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
89707
Message:

Main/NetworkAdapterImpl.cpp: Avoids lock drops and re-acquirings on NAT Networking changes in NetworkAdapter::COMSETTER(NATNetwork)(...) and NetworkAdapter::COMSETTER(AttachmentType)(...)

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/NetworkAdapterImpl.h

    r48710 r48989  
    155155    HRESULT updateMacAddress(Utf8Str aMacAddress);
    156156    void updateBandwidthGroup(BandwidthGroup *aBwGroup);
    157     HRESULT checkAndSwitchFromNatNetworking();
     157    HRESULT checkAndSwitchFromNatNetworking(IN_BSTR aNatNetworkName);
    158158    HRESULT switchToNatNetworking(IN_BSTR aNatNetworkName);
    159159
  • trunk/src/VBox/Main/src-server/NetworkAdapterImpl.cpp

    r48988 r48989  
    484484        }
    485485
    486 #if 0 // later
    487         alock.release();
    488         HRESULT hrc = checkAndSwitchFromNatNetworking();
    489         if (FAILED(hrc))
    490             return hrc;
    491         alock.acquire();
    492 #endif
    493 
     486        NetworkAttachmentType_T oldAttachmentType = mData->mAttachmentType;
    494487        mData->mAttachmentType = aAttachmentType;
    495 
    496 #if 0 // later
    497         alock.release();
    498         if (aAttachmentType == NetworkAttachmentType_NATNetwork)
    499         {
    500             hrc = switchToNatNetworking(mData->mNATNetwork.raw());
    501             if (FAILED(hrc))
    502                 return hrc;
    503         }
    504         alock.acquire();
    505 #endif
    506488
    507489        m_fModified = true;
     
    512494        mParent->setModified(Machine::IsModified_NetworkAdapters);
    513495        mlock.release();
     496
     497        if (oldAttachmentType == NetworkAttachmentType_NATNetwork)
     498            checkAndSwitchFromNatNetworking(mData->mNATNetwork.raw());
     499
     500        if (aAttachmentType == NetworkAttachmentType_NATNetwork)
     501            switchToNatNetworking(mData->mNATNetwork.raw());
    514502
    515503        /* Adapt the CFGM logic and notify the guest => changeAdapter=TRUE. */
     
    728716    {
    729717
    730         HRESULT hrc;
    731718        /* if an empty/null string is to be set, host only interface must be
    732719         * turned off */
     
    740727        mData.backup();
    741728
    742         alock.release();
    743 
    744         hrc = checkAndSwitchFromNatNetworking();
    745         if (FAILED(hrc))
    746             return hrc;
    747 
    748         hrc = switchToNatNetworking(aNATNetwork);
    749         if (FAILED(hrc))
    750             return hrc;
    751 
    752         alock.acquire();
    753 
     729        Bstr oldNatNetworkName = mData->mNATNetwork;
    754730        mData->mNATNetwork = aNATNetwork;
    755731
     
    761737        mParent->setModified(Machine::IsModified_NetworkAdapters);
    762738        mlock.release();
     739
     740        checkAndSwitchFromNatNetworking(oldNatNetworkName.raw());
     741
     742        switchToNatNetworking(aNATNetwork);
    763743
    764744        /* When changing the host adapter, adapt the CFGM logic to make this
     
    15851565
    15861566
    1587 HRESULT NetworkAdapter::checkAndSwitchFromNatNetworking()
     1567HRESULT NetworkAdapter::checkAndSwitchFromNatNetworking(IN_BSTR networkName)
    15881568{
    15891569    HRESULT hrc;
     
    15991579        Bstr bstrName;
    16001580        hrc = mParent->COMGETTER(Name)(bstrName.asOutParam());
    1601         LogRel(("VM '%ls' stops using NAT network '%ls'\n", bstrName.raw(), mData->mNATNetwork.raw()));
    1602         int natCount = mParent->getVirtualBox()->natNetworkRefDec(mData->mNATNetwork.raw());
     1581        LogRel(("VM '%ls' stops using NAT network '%ls'\n", bstrName.raw(), networkName));
     1582        int natCount = mParent->getVirtualBox()->natNetworkRefDec(networkName);
    16031583        if (natCount == -1)
    16041584            return E_INVALIDARG; /* no such network */
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