VirtualBox

Changeset 31473 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Aug 9, 2010 9:54:17 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
64555
Message:

Main: avoid excessive copying in VirtualBox::saveSettings()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/VirtualBoxImpl.cpp

    r31464 r31473  
    31863186    {
    31873187        // machines
    3188         settings::MachinesRegistry machinesTemp;
     3188        m->pMainConfigFile->llMachines.clear();
    31893189        {
    31903190            AutoReadLock machinesLock(m->allMachines.getLockHandle() COMMA_LOCKVAL_SRC_POS);
     
    31973197                settings::MachineRegistryEntry mre;
    31983198                rc = pMachine->saveRegistryEntry(mre);
    3199                 machinesTemp.push_back(mre);
     3199                m->pMainConfigFile->llMachines.push_back(mre);
    32003200            }
    32013201        }
     
    32373237
    32383238        // hard disks
    3239         settings::MediaList hardDisksTemp;
     3239        m->pMainConfigFile->mediaRegistry.llHardDisks.clear();
    32403240        for (MediaList::const_iterator it = m->allHardDisks.begin();
    32413241             it != m->allHardDisks.end();
     
    32453245            rc = (*it)->saveSettings(med);     // this recurses into its children
    32463246            if (FAILED(rc)) throw rc;
    3247             hardDisksTemp.push_back(med);
     3247            m->pMainConfigFile->mediaRegistry.llHardDisks.push_back(med);
    32483248        }
    32493249
    32503250        /* CD/DVD images */
    3251         settings::MediaList dvdsTemp;
     3251        m->pMainConfigFile->mediaRegistry.llDvdImages.clear();
    32523252        for (MediaList::const_iterator it = m->allDVDImages.begin();
    32533253             it != m->allDVDImages.end();
     
    32573257            rc = (*it)->saveSettings(med);
    32583258            if (FAILED(rc)) throw rc;
    3259             dvdsTemp.push_back(med);
     3259            m->pMainConfigFile->mediaRegistry.llDvdImages.push_back(med);
    32603260        }
    32613261
    32623262        /* floppy images */
    3263         settings::MediaList floppiesTemp;
     3263        m->pMainConfigFile->mediaRegistry.llFloppyImages.clear();
    32643264        for (MediaList::const_iterator it = m->allFloppyImages.begin();
    32653265             it != m->allFloppyImages.end();
     
    32693269            rc = (*it)->saveSettings(med);
    32703270            if (FAILED(rc)) throw rc;
    3271             floppiesTemp.push_back(med);
     3271            m->pMainConfigFile->mediaRegistry.llFloppyImages.push_back(med);
    32723272        }
    32733273
    32743274        mediaLock.release();
    32753275
    3276         settings::DHCPServersList dhcpServersTemp;
     3276        m->pMainConfigFile->llDhcpServers.clear();
    32773277        {
    32783278            AutoReadLock dhcpLock(m->allDHCPServers.getLockHandle() COMMA_LOCKVAL_SRC_POS);
     
    32843284                rc = (*it)->saveSettings(d);
    32853285                if (FAILED(rc)) throw rc;
    3286                 dhcpServersTemp.push_back(d);
     3286                m->pMainConfigFile->llDhcpServers.push_back(d);
    32873287            }
    32883288        }
    3289 
    3290         /* now copy the temp data to the config file under the VirtualBox lock */
    3291         m->pMainConfigFile->llMachines = machinesTemp;
    3292         m->pMainConfigFile->mediaRegistry.llHardDisks = hardDisksTemp;
    3293         m->pMainConfigFile->mediaRegistry.llDvdImages = dvdsTemp;
    3294         m->pMainConfigFile->mediaRegistry.llFloppyImages = floppiesTemp;
    3295         m->pMainConfigFile->llDhcpServers = dhcpServersTemp;
    32963289
    32973290        // leave extra data alone, it's still in the config file
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