VirtualBox

Changeset 35872 in vbox


Ignore:
Timestamp:
Feb 7, 2011 1:43:33 PM (14 years ago)
Author:
vboxsync
Message:

Main: Clear Console::mpVM on config constructor failure.

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

Legend:

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

    r35755 r35872  
    471471
    472472    static DECLCALLBACK(int) configConstructor(PVM pVM, void *pvConsole);
     473    int configConstructorInner(PVM pVM, AutoWriteLock *pAlock);
    473474    int configCfgmOverlay(PVM pVM, IVirtualBox *pVirtualBox, IMachine *pMachine);
    474475
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r35830 r35872  
    553553    AutoWriteLock alock(pConsole COMMA_LOCKVAL_SRC_POS);
    554554
    555     /* Save the VM pointer in the machine object */
     555    /*
     556     * Set the VM handle and do the rest of the job in an worker method so we
     557     * can easily reset the VM handle on failure.
     558     */
    556559    pConsole->mpVM = pVM;
    557 
    558     VMMDev *pVMMDev = pConsole->m_pVMMDev;
     560    int vrc = pConsole->configConstructorInner(pVM, &alock);
     561    if (RT_FAILURE(vrc))
     562        pConsole->mpVM = NULL;
     563
     564    return vrc;
     565}
     566
     567
     568/**
     569 * Worker for configConstructor.
     570 *
     571 * @return  VBox status code.
     572 * @param   pVM         The VM handle.
     573 */
     574int Console::configConstructorInner(PVM pVM, AutoWriteLock *pAlock)
     575{
     576    VMMDev *pVMMDev = m_pVMMDev;
    559577    Assert(pVMMDev);
    560578
    561     ComPtr<IMachine> pMachine = pConsole->machine();
     579    ComPtr<IMachine> pMachine = machine();
    562580
    563581    int             rc;
     
    609627    }
    610628
    611     BusAssignmentManager* BusMgr = pConsole->mBusMgr = BusAssignmentManager::createInstance(chipsetType);
     629    BusAssignmentManager* BusMgr = mBusMgr = BusAssignmentManager::createInstance(chipsetType);
    612630
    613631    ULONG cCpus = 1;
     
    9831001#ifdef VBOX_WITH_PCI_PASSTHROUGH
    9841002            /* Add PCI passthrough devices */
    985             hrc = attachRawPciDevices(BusMgr, pDevices, pConsole);                               H();
     1003            hrc = attachRawPciDevices(BusMgr, pDevices, this);                                   H();
    9861004#endif
    9871005        }
     
    10601078        InsertConfigString(pLunL1, "Driver",               "MainKeyboard");
    10611079        InsertConfigNode(pLunL1,   "Config", &pCfg);
    1062         Keyboard *pKeyboard = pConsole->mKeyboard;
     1080        Keyboard *pKeyboard = mKeyboard;
    10631081        InsertConfigInteger(pCfg,  "Object",     (uintptr_t)pKeyboard);
    10641082
     
    10711089        InsertConfigString(pLunL1, "Driver",               "MainMouse");
    10721090        InsertConfigNode(pLunL1,   "Config", &pCfg);
    1073         Mouse *pMouse = pConsole->mMouse;
     1091        Mouse *pMouse = mMouse;
    10741092        InsertConfigInteger(pCfg,  "Object",     (uintptr_t)pMouse);
    10751093
     
    11901208        /* VESA height reduction */
    11911209        ULONG ulHeightReduction;
    1192         IFramebuffer *pFramebuffer = pConsole->getDisplay()->getFramebuffer();
     1210        IFramebuffer *pFramebuffer = getDisplay()->getFramebuffer();
    11931211        if (pFramebuffer)
    11941212        {
     
    12061224        InsertConfigString(pLunL0, "Driver",               "MainDisplay");
    12071225        InsertConfigNode(pLunL0,   "Config", &pCfg);
    1208         Display *pDisplay = pConsole->mDisplay;
     1226        Display *pDisplay = mDisplay;
    12091227        InsertConfigInteger(pCfg,  "Object", (uintptr_t)pDisplay);
    12101228
     
    13831401
    13841402            /* /Devices/<ctrldev>/ */
    1385             const char *pszCtrlDev = pConsole->convertControllerTypeToDev(enmCtrlType);
     1403            const char *pszCtrlDev = convertControllerTypeToDev(enmCtrlType);
    13861404            pDev = aCtrlNodes[enmCtrlType];
    13871405            if (!pDev)
     
    14111429                    InsertConfigString(pLunL0, "Driver",               "MainStatus");
    14121430                    InsertConfigNode(pLunL0,   "Config", &pCfg);
    1413                     InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedScsi]);
     1431                    InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapStorageLeds[iLedScsi]);
    14141432                    InsertConfigInteger(pCfg,  "First",    0);
    14151433                    Assert(cLedScsi >= 16);
    14161434                    InsertConfigInteger(pCfg,  "Last",     15);
    1417                     paLedDevType = &pConsole->maStorageDevType[iLedScsi];
     1435                    paLedDevType = &maStorageDevType[iLedScsi];
    14181436                    break;
    14191437                }
     
    14291447                    InsertConfigString(pLunL0, "Driver",               "MainStatus");
    14301448                    InsertConfigNode(pLunL0,   "Config", &pCfg);
    1431                     InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedScsi]);
     1449                    InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapStorageLeds[iLedScsi]);
    14321450                    InsertConfigInteger(pCfg,  "First",    0);
    14331451                    Assert(cLedScsi >= 16);
    14341452                    InsertConfigInteger(pCfg,  "Last",     15);
    1435                     paLedDevType = &pConsole->maStorageDevType[iLedScsi];
     1453                    paLedDevType = &maStorageDevType[iLedScsi];
    14361454                    break;
    14371455                }
     
    14741492                    InsertConfigNode(pLunL0,   "Config", &pCfg);
    14751493                    AssertRelease(cPorts <= cLedSata);
    1476                     InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedSata]);
     1494                    InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapStorageLeds[iLedSata]);
    14771495                    InsertConfigInteger(pCfg,  "First",    0);
    14781496                    InsertConfigInteger(pCfg,  "Last",     cPorts - 1);
    1479                     paLedDevType = &pConsole->maStorageDevType[iLedSata];
     1497                    paLedDevType = &maStorageDevType[iLedSata];
    14801498                    break;
    14811499                }
     
    14951513                    InsertConfigString(pLunL0, "Driver",               "MainStatus");
    14961514                    InsertConfigNode(pLunL0,   "Config", &pCfg);
    1497                     InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedIde]);
     1515                    InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapStorageLeds[iLedIde]);
    14981516                    InsertConfigInteger(pCfg,  "First",    0);
    14991517                    Assert(cLedIde >= 4);
    15001518                    InsertConfigInteger(pCfg,  "Last",     3);
    1501                     paLedDevType = &pConsole->maStorageDevType[iLedIde];
     1519                    paLedDevType = &maStorageDevType[iLedIde];
    15021520
    15031521                    /* IDE flavors */
     
    15231541                    InsertConfigString(pLunL0, "Driver",               "MainStatus");
    15241542                    InsertConfigNode(pLunL0,   "Config", &pCfg);
    1525                     InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedFloppy]);
     1543                    InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapStorageLeds[iLedFloppy]);
    15261544                    InsertConfigInteger(pCfg,  "First",    0);
    15271545                    Assert(cLedFloppy >= 1);
    15281546                    InsertConfigInteger(pCfg,  "Last",     0);
    1529                     paLedDevType = &pConsole->maStorageDevType[iLedFloppy];
     1547                    paLedDevType = &maStorageDevType[iLedFloppy];
    15301548                    break;
    15311549                }
     
    15421560                    InsertConfigString(pLunL0, "Driver",               "MainStatus");
    15431561                    InsertConfigNode(pLunL0,   "Config", &pCfg);
    1544                     InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedSas]);
     1562                    InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapStorageLeds[iLedSas]);
    15451563                    InsertConfigInteger(pCfg,  "First",    0);
    15461564                    Assert(cLedSas >= 8);
    15471565                    InsertConfigInteger(pCfg,  "Last",     7);
    1548                     paLedDevType = &pConsole->maStorageDevType[iLedSas];
     1566                    paLedDevType = &maStorageDevType[iLedSas];
    15491567                    break;
    15501568                }
     
    15661584            for (size_t j = 0; j < atts.size(); ++j)
    15671585            {
    1568                 rc = pConsole->configMediumAttachment(pCtlInst,
    1569                                                       pszCtrlDev,
    1570                                                       ulInstance,
    1571                                                       enmBus,
    1572                                                       !!fUseHostIOCache,
    1573                                                       !!fBuiltinIoCache,
    1574                                                       false /* fSetupMerge */,
    1575                                                       0 /* uMergeSource */,
    1576                                                       0 /* uMergeTarget */,
    1577                                                       atts[j],
    1578                                                       pConsole->mMachineState,
    1579                                                       NULL /* phrc */,
    1580                                                       false /* fAttachDetach */,
    1581                                                       false /* fForceUnmount */,
    1582                                                       pVM,
    1583                                                       paLedDevType);
     1586                rc = configMediumAttachment(pCtlInst,
     1587                                            pszCtrlDev,
     1588                                            ulInstance,
     1589                                            enmBus,
     1590                                            !!fUseHostIOCache,
     1591                                            !!fBuiltinIoCache,
     1592                                            false /* fSetupMerge */,
     1593                                            0 /* uMergeSource */,
     1594                                            0 /* uMergeTarget */,
     1595                                            atts[j],
     1596                                            mMachineState,
     1597                                            NULL /* phrc */,
     1598                                            false /* fAttachDetach */,
     1599                                            false /* fForceUnmount */,
     1600                                            pVM,
     1601                                            paLedDevType);
    15841602                if (RT_FAILURE(rc))
    15851603                    return rc;
     
    17721790            InsertConfigString(pLunL0, "Driver",               "MainStatus");
    17731791            InsertConfigNode(pLunL0,   "Config", &pCfg);
    1774             InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapNetworkLeds[ulInstance]);
     1792            InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapNetworkLeds[ulInstance]);
    17751793
    17761794            /*
    17771795             * Configure the network card now
    17781796             */
    1779             bool fIgnoreConnectFailure = pConsole->mMachineState == MachineState_Restoring;
    1780             rc = pConsole->configNetwork(pszAdapterName,
    1781                                          ulInstance,
    1782                                          0,
    1783                                          networkAdapter,
    1784                                          pCfg,
    1785                                          pLunL0,
    1786                                          pInst,
    1787                                          false /*fAttachDetach*/,
    1788                                          fIgnoreConnectFailure);
     1797            bool fIgnoreConnectFailure = mMachineState == MachineState_Restoring;
     1798            rc = configNetwork(pszAdapterName,
     1799                               ulInstance,
     1800                               0,
     1801                               networkAdapter,
     1802                               pCfg,
     1803                               pLunL0,
     1804                               pInst,
     1805                               false /*fAttachDetach*/,
     1806                               fIgnoreConnectFailure);
    17891807            if (RT_FAILURE(rc))
    17901808                return rc;
     
    19431961        InsertConfigString(pLunL0, "Driver",               "MainStatus");
    19441962        InsertConfigNode(pLunL0,   "Config", &pCfg);
    1945         InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapSharedFolderLed);
     1963        InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapSharedFolderLed);
    19461964        InsertConfigInteger(pCfg,  "First",    0);
    19471965        InsertConfigInteger(pCfg,  "Last",     0);
     
    19581976        InsertConfigString(pLunL0, "Driver",               "MainAudioSniffer");
    19591977        InsertConfigNode(pLunL0,   "Config", &pCfg);
    1960         AudioSniffer *pAudioSniffer = pConsole->mAudioSniffer;
     1978        AudioSniffer *pAudioSniffer = mAudioSniffer;
    19611979        InsertConfigInteger(pCfg,  "Object", (uintptr_t)pAudioSniffer);
    19621980
     
    21162134                InsertConfigString(pLunL0, "Driver",               "MainStatus");
    21172135                InsertConfigNode(pLunL0,   "Config", &pCfg);
    2118                 InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapUSBLed[0]);
     2136                InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapUSBLed[0]);
    21192137                InsertConfigInteger(pCfg,  "First",    0);
    21202138                InsertConfigInteger(pCfg,  "Last",     0);
     
    21352153                    static const char *s_pszUsbExtPackName = "Oracle VM VirtualBox Extension Pack";
    21362154# ifdef VBOX_WITH_EXTPACK
    2137                     if (pConsole->mptrExtPackManager->isExtPackUsable(s_pszUsbExtPackName))
     2155                    if (mptrExtPackManager->isExtPackUsable(s_pszUsbExtPackName))
    21382156# endif
    21392157                    {
     
    21542172                        InsertConfigString(pLunL0, "Driver",               "MainStatus");
    21552173                        InsertConfigNode(pLunL0,   "Config", &pCfg);
    2156                         InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&pConsole->mapUSBLed[1]);
     2174                        InsertConfigInteger(pCfg,  "papLeds", (uintptr_t)&mapUSBLed[1]);
    21572175                        InsertConfigInteger(pCfg,  "First",    0);
    21582176                        InsertConfigInteger(pCfg,  "Last",     0);
     
    21622180                    {
    21632181                        /* Fatal if a saved state is being restored, otherwise ignorable. */
    2164                         if (pConsole->mMachineState == MachineState_Restoring)
     2182                        if (mMachineState == MachineState_Restoring)
    21652183                            return VMSetError(pVM, VERR_NOT_FOUND, RT_SRC_POS,
    21662184                                    N_("Implementation of the USB 2.0 controller not found!\n"
     
    21702188                                       "support in the VM settings"),
    21712189                                    s_pszUsbExtPackName);
    2172                         setVMRuntimeErrorCallbackF(pVM, pConsole, 0, "ExtPackNoEhci",
     2190                        setVMRuntimeErrorCallbackF(pVM, this, 0, "ExtPackNoEhci",
    21732191                                N_("Implementation of the USB 2.0 controller not found!\n"
    21742192                                   "The device will be disabled. You can ignore this warning "
     
    22532271                    InsertConfigString(pLunL1, "Driver",        "MainMouse");
    22542272                    InsertConfigNode(pLunL1,   "Config", &pCfg);
    2255                     pMouse = pConsole->mMouse;
     2273                    pMouse = mMouse;
    22562274                    InsertConfigInteger(pCfg,  "Object",     (uintptr_t)pMouse);
    22572275                }
     
    22742292                    InsertConfigString(pLunL1, "Driver",               "MainKeyboard");
    22752293                    InsertConfigNode(pLunL1,   "Config", &pCfg);
    2276                     pKeyboard = pConsole->mKeyboard;
     2294                    pKeyboard = mKeyboard;
    22772295                    InsertConfigInteger(pCfg,  "Object",     (uintptr_t)pKeyboard);
    22782296                }
     
    23672385                    parm.type = VBOX_HGCM_SVC_PARM_PTR;
    23682386
    2369                     parm.u.pointer.addr = (IConsole*) (Console*) pConsole;
     2387                    parm.u.pointer.addr = (IConsole *)(Console *)this;
    23702388                    parm.u.pointer.size = sizeof(IConsole *);
    23712389
     
    23902408         */
    23912409
    2392         rc = configGuestProperties(pConsole);
     2410        rc = configGuestProperties(this);
    23932411#endif /* VBOX_WITH_GUEST_PROPS defined */
    23942412
     
    23982416         */
    23992417
    2400         rc = configGuestControl(pConsole);
     2418        rc = configGuestControl(this);
    24012419#endif /* VBOX_WITH_GUEST_CONTROL defined */
    24022420
     
    25002518    if (RT_SUCCESS(rc))
    25012519    {
    2502         alock.release();
    2503         rc = pConsole->mptrExtPackManager->callAllVmConfigureVmmHooks(pConsole, pVM);
    2504         alock.acquire();
     2520        pAlock->release();
     2521        rc = mptrExtPackManager->callAllVmConfigureVmmHooks(this, pVM);
     2522        pAlock->acquire();
    25052523    }
    25062524#endif
     
    25102528     */
    25112529    if (RT_SUCCESS(rc))
    2512         rc = pConsole->configCfgmOverlay(pVM, virtualBox, pMachine);
     2530        rc = configCfgmOverlay(pVM, virtualBox, pMachine);
    25132531
    25142532#undef H
     
    25172535     * Register VM state change handler.
    25182536     */
    2519     int rc2 = VMR3AtStateRegister(pVM, Console::vmstateChangeCallback, pConsole);
     2537    int rc2 = VMR3AtStateRegister(pVM, Console::vmstateChangeCallback, this);
    25202538    AssertRC(rc2);
    25212539    if (RT_SUCCESS(rc))
     
    25252543     * Register VM runtime error handler.
    25262544     */
    2527     rc2 = VMR3AtRuntimeErrorRegister(pVM, Console::setVMRuntimeErrorCallback, pConsole);
     2545    rc2 = VMR3AtRuntimeErrorRegister(pVM, Console::setVMRuntimeErrorCallback, this);
    25282546    AssertRC(rc2);
    25292547    if (RT_SUCCESS(rc))
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