VirtualBox

Changeset 35135 in vbox


Ignore:
Timestamp:
Dec 15, 2010 1:41:41 PM (14 years ago)
Author:
vboxsync
Message:

Main/VirtualBoxClient: If the API client process stays alive after the VBoxSVC unavailability was signalled, assume that the client can properly handle the corresponding available event. In this case, restart VBoxSVC and continue.

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

Legend:

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

    r34642 r35135  
    7373        AssertFailedReturn(E_FAIL);
    7474
    75     rc = unconst(mData.m_pVirtualBox).createLocalObject(CLSID_VirtualBox);
     75    rc = mData.m_pVirtualBox.createLocalObject(CLSID_VirtualBox);
    7676    AssertComRCReturnRC(rc);
    7777
     
    130130    }
    131131
    132     unconst(mData.m_pVirtualBox).setNull();
     132    mData.m_pVirtualBox.setNull();
    133133
    134134    ASMAtomicDecU32(&g_cInstances);
     
    151151    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    152152
    153     /* this is const, no need to lock */
     153    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    154154    mData.m_pVirtualBox.queryInterfaceTo(aVirtualBox);
    155155    return S_OK;
     
    220220        {
    221221            HRESULT rc = S_OK;
    222             ComPtr<IVirtualBox> pV = pThis->mData.m_pVirtualBox;
     222            ComPtr<IVirtualBox> pV;
     223            {
     224                AutoReadLock alock(pThis COMMA_LOCKVAL_SRC_POS);
     225                pV = pThis->mData.m_pVirtualBox;
     226            }
    223227            if (!pV.isNull())
    224228            {
     
    228232                {
    229233                    LogRel(("VirtualBoxClient: detected unresponsive VBoxSVC (rc=%Rhrc)\n", rc));
     234                    {
     235                        AutoWriteLock alock(pThis COMMA_LOCKVAL_SRC_POS);
     236                        /* Throw away the VirtualBox reference, it's no longer
     237                         * usable as VBoxSVC terminated in the mean time. */
     238                        pThis->mData.m_pVirtualBox.setNull();
     239                    }
    230240                    fireVBoxSVCUnavailableEvent(pThis->mData.m_pEventSource);
    231 
    232                     /* Throw away the VirtualBox reference, it's no longer
    233                      * usable as VBoxSVC terminated in the mean time. */
    234                     unconst(pThis->mData.m_pVirtualBox).setNull();
    235241                }
    236242            }
     
    241247                 * restart attempts in some wedged config can cause high CPU
    242248                 * and disk load. */
    243                 rc = unconst(pThis->mData.m_pVirtualBox).createLocalObject(CLSID_VirtualBox);
     249                ComPtr<IVirtualBox> pVBox;
     250                rc = pVBox.createLocalObject(CLSID_VirtualBox);
    244251                if (FAILED(rc))
    245252                    cMillies = 3 * VBOXCLIENT_DEFAULT_INTERVAL;
    246253                else
     254                {
     255                    LogRel(("VirtualBoxClient: detected working VBoxSVC (rc=%Rhrc)\n", rc));
     256                    {
     257                        AutoWriteLock alock(pThis COMMA_LOCKVAL_SRC_POS);
     258                        /* Update the VirtualBox reference, there's a working
     259                         * VBoxSVC again from now on. */
     260                        pThis->mData.m_pVirtualBox = pVBox;
     261                    }
     262                    fireVBoxSVCAvailableEvent(pThis->mData.m_pEventSource);
    247263                    cMillies = VBOXCLIENT_DEFAULT_INTERVAL;
     264                }
    248265            }
    249266        }
  • trunk/src/VBox/Main/include/VirtualBoxClientImpl.h

    r34642 r35135  
    7676        {}
    7777
    78         const ComPtr<IVirtualBox> m_pVirtualBox;
     78        ComPtr<IVirtualBox> m_pVirtualBox;
    7979        const ComObjPtr<EventSource> m_pEventSource;
    8080
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