VirtualBox

Changeset 35722 in vbox for trunk/src


Ignore:
Timestamp:
Jan 26, 2011 4:37:16 PM (14 years ago)
Author:
vboxsync
Message:

Main: reworked listener objects creation, fixes Win problems with events, few cleanups

Location:
trunk/src/VBox
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp

    r35446 r35722  
    9999
    100100    virtual ~VirtualBoxClientEventListener()
     101    {
     102    }
     103
     104    HRESULT init()
     105    {
     106        return S_OK;
     107    }
     108
     109    void uninit()
    101110    {
    102111    }
     
    145154
    146155    virtual ~VirtualBoxEventListener()
     156    {
     157    }
     158
     159    HRESULT init()
     160    {
     161        return S_OK;
     162    }
     163
     164    void uninit()
    147165    {
    148166    }
     
    252270
    253271    virtual ~ConsoleEventListener()
     272    {
     273    }
     274
     275    HRESULT init()
     276    {
     277        return S_OK;
     278    }
     279
     280    void uninit()
    254281    {
    255282    }
     
    763790    ComPtr<IMachine> machine;
    764791    bool fSessionOpened = false;
    765     IEventListener *vboxClientListener = NULL;
    766     IEventListener *vboxListener = NULL;
    767     ConsoleEventListenerImpl *consoleListener = NULL;
     792    ComPtr<IEventListener> vboxClientListener;
     793    ComPtr<IEventListener> vboxListener;
     794    ComObjPtr<ConsoleEventListenerImpl> consoleListener;
    768795
    769796    do
     
    10011028            ComPtr<IEventSource> pES;
    10021029            CHECK_ERROR(pVirtualBoxClient, COMGETTER(EventSource)(pES.asOutParam()));
    1003             vboxClientListener = new VirtualBoxClientEventListenerImpl();
     1030            ComObjPtr<VirtualBoxClientEventListenerImpl> listener;
     1031            listener.createObject();
     1032            listener->init(new VirtualBoxClientEventListener());
     1033            vboxClientListener = listener;
    10041034            com::SafeArray<VBoxEventType_T> eventTypes;
    10051035            eventTypes.push_back(VBoxEventType_OnVBoxSVCAvailabilityChanged);
     
    10111041            ComPtr<IEventSource> es;
    10121042            CHECK_ERROR(console, COMGETTER(EventSource)(es.asOutParam()));
    1013             consoleListener = new ConsoleEventListenerImpl();
     1043            consoleListener.createObject();
     1044            consoleListener->init(new ConsoleEventListener());
    10141045            com::SafeArray<VBoxEventType_T> eventTypes;
    10151046            eventTypes.push_back(VBoxEventType_OnMouseCapabilityChanged);
     
    11661197            ComPtr<IEventSource> es;
    11671198            CHECK_ERROR(virtualBox, COMGETTER(EventSource)(es.asOutParam()));
    1168             vboxListener = new VirtualBoxEventListenerImpl();
     1199            ComObjPtr<VirtualBoxEventListenerImpl> listener;
     1200            listener.createObject();
     1201            listener->init(new VirtualBoxEventListener());
     1202            vboxListener = listener;
    11691203            com::SafeArray<VBoxEventType_T> eventTypes;
    11701204            eventTypes.push_back(VBoxEventType_OnGuestPropertyChanged);
  • trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp

    r35666 r35722  
    245245    }
    246246
     247    HRESULT init()
     248    {
     249        return S_OK;
     250    }
     251
     252    void uninit()
     253    {
     254    }
     255
    247256    STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent * aEvent)
    248257    {
     
    287296
    288297    virtual ~VBoxSDLEventListener()
     298    {
     299    }
     300
     301    HRESULT init()
     302    {
     303        return S_OK;
     304    }
     305
     306    void uninit()
    289307    {
    290308    }
     
    347365
    348366    virtual ~VBoxSDLConsoleEventListener()
     367    {
     368    }
     369
     370    HRESULT init()
     371    {
     372        return S_OK;
     373    }
     374
     375    void uninit()
    349376    {
    350377    }
     
    772799    uint32_t memorySize = 0;
    773800    uint32_t vramSize = 0;
    774     IEventListener *pVBoxClientListener = NULL;
    775     IEventListener *pVBoxListener = NULL;
    776     VBoxSDLConsoleEventListenerImpl *pConsoleListener = NULL;
     801    ComPtr<IEventListener> pVBoxClientListener;
     802    ComPtr<IEventListener> pVBoxListener;
     803    ComObjPtr<VBoxSDLConsoleEventListenerImpl> pConsoleListener;
    777804
    778805    bool fFullscreen = false;
     
    18341861        ComPtr<IEventSource> pES;
    18351862        CHECK_ERROR(pVirtualBoxClient, COMGETTER(EventSource)(pES.asOutParam()));
    1836         pVBoxClientListener = new VBoxSDLClientEventListenerImpl();
     1863        ComObjPtr<VBoxSDLClientEventListenerImpl> listener;
     1864        listener.createObject();
     1865        listener->init(new VBoxSDLClientEventListener());
     1866        pVBoxClientListener = listener;
    18371867        com::SafeArray<VBoxEventType_T> eventTypes;
    18381868        eventTypes.push_back(VBoxEventType_OnVBoxSVCAvailabilityChanged);
     
    18441874        ComPtr<IEventSource> pES;
    18451875        CHECK_ERROR(pVirtualBox, COMGETTER(EventSource)(pES.asOutParam()));
    1846         pVBoxListener = new VBoxSDLEventListenerImpl();
     1876        ComObjPtr<VBoxSDLEventListenerImpl> listener;
     1877        listener.createObject();
     1878        listener->init(new VBoxSDLEventListener());
     1879        pVBoxListener = listener;
    18471880        com::SafeArray<VBoxEventType_T> eventTypes;
    18481881        eventTypes.push_back(VBoxEventType_OnExtraDataChanged);
     
    18541887        ComPtr<IEventSource> pES;
    18551888        CHECK_ERROR(gpConsole, COMGETTER(EventSource)(pES.asOutParam()));
    1856         pConsoleListener = new VBoxSDLConsoleEventListenerImpl();
     1889        pConsoleListener.createObject();
     1890        pConsoleListener->init(new VBoxSDLConsoleEventListener());
    18571891        com::SafeArray<VBoxEventType_T> eventTypes;
    18581892        eventTypes.push_back(VBoxEventType_OnMousePointerShapeChanged);
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIExtraDataEventHandler.cpp

    r34527 r35722  
    252252//    RTPrintf("Self add: %RTthrd\n", RTThreadSelf());
    253253    const CVirtualBox &vbox = vboxGlobal().virtualBox();
    254     UIMainEventListenerImpl *pListener = new UIMainEventListenerImpl(this);
     254    ComObjPtr<UIMainEventListenerImpl> pListener;
     255    pListener.createObject();
     256    pListener->init(new UIMainEventListener(), this);
    255257    m_mainEventListener = CEventListener(pListener);
    256258    QVector<KVBoxEventType> events;
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp

    r34527 r35722  
    2525//#include <iprt/stream.h>
    2626
    27 UIMainEventListener::UIMainEventListener(QObject * /* pParent */)
    28 //  : QObject(pParent) /* Todo: Not sure if pParent should delete this. Especially on Win there is ref counting implemented. */
     27UIMainEventListener::UIMainEventListener()
    2928  : QObject()
    3029{
     
    4241}
    4342
     43HRESULT UIMainEventListener::init(QObject * /* pParent */)
     44{
     45    return S_OK;
     46}
     47
     48void    UIMainEventListener::uninit()
     49{
     50}
    4451
    4552/**
     
    5057{
    5158    CEvent event(pEvent);
    52 //    RTPrintf("Event received: %d (%RTthrd)\n", event.GetType(), RTThreadSelf());
     59    // printf("Event received: %d\n", event.GetType());
    5360    switch(event.GetType())
    5461    {
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h

    r34527 r35722  
    4343
    4444public:
    45     UIMainEventListener(QObject *pParent);
     45    UIMainEventListener();
     46
     47
     48    HRESULT init(QObject *pParent);
     49    void    uninit();
    4650
    4751    STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *pEvent);
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp

    r35665 r35722  
    52495249    QApplication::removePostedEvents (this);
    52505250
    5251 #ifdef Q_WS_WIN
    5252     /* COM for the main thread is shutdown in main() */
    5253 #else
    52545251    COMBase::CleanupCOM();
    5255 #endif
    52565252
    52575253    mValid = false;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp

    r34527 r35722  
    5959
    6060//    RTPrintf("Self add: %RTthrd\n", RTThreadSelf());
    61     UIMainEventListenerImpl *pListener = new UIMainEventListenerImpl(this);
     61    ComObjPtr<UIMainEventListenerImpl> pListener;
     62    pListener.createObject();
     63    pListener->init(new UIMainEventListener(), this);
    6264    m_mainEventListener = CEventListener(pListener);
    6365    QVector<KVBoxEventType> events;
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp

    r34527 r35722  
    5252//    RTPrintf("Self add: %RTthrd\n", RTThreadSelf());
    5353    const CVirtualBox &vbox = vboxGlobal().virtualBox();
    54     UIMainEventListenerImpl *pListener = new UIMainEventListenerImpl(this);
     54    ComObjPtr<UIMainEventListenerImpl> pListener;
     55    pListener.createObject();
     56    pListener->init(new UIMainEventListener(), this);
    5557    m_mainEventListener = CEventListener(pListener);
    5658    QVector<KVBoxEventType> events;
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r35638 r35722  
    754754    }
    755755    mCallbackData;
    756     COM_STRUCT_OR_CLASS(IEventListener) *mVmListener;
     756    ComPtr<IEventListener> mVmListener;
    757757
    758758    friend struct VMTask;
  • trunk/src/VBox/Main/include/ConsoleVRDPServer.h

    r35638 r35722  
    175175    IFramebuffer *maFramebuffers[SchemaDefs::MaxGuestMonitors];
    176176
    177     IEventListener *mConsoleListener;
     177    ComPtr<IEventListener> mConsoleListener;
    178178
    179179    VRDPInputSynch m_InputSynch;
  • trunk/src/VBox/Main/include/VirtualBoxBase.h

    r35638 r35722  
    646646     {
    647647#ifdef RT_OS_WINDOWS
    648         return   CoCreateFreeThreadedMarshaler(this, //GetControllingUnknown(),
    649                                                &m_pUnkMarshaler.p);
     648        return CoCreateFreeThreadedMarshaler(this, //GetControllingUnknown(),
     649                                             &m_pUnkMarshaler.p);
    650650#else
    651651        return S_OK;
  • trunk/src/VBox/Main/src-all/EventImpl.cpp

    r35638 r35722  
    804804            aAlock.release();
    805805            rc =  mListener->HandleEvent(aEvent);
     806#ifdef RT_OS_WINDOWS
     807            Assert(rc != RPC_E_WRONG_THREAD);
     808#endif
    806809            aAlock.acquire();
    807810        }
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r35676 r35722  
    266266class VmEventListener {
    267267public:
    268     VmEventListener(Console *aConsole)
     268    VmEventListener()
     269    {}
     270
     271
     272    HRESULT init(Console *aConsole)
    269273    {
    270274        mConsole = aConsole;
     275        return S_OK;
     276    }
     277
     278    void uninit()
     279    {
    271280    }
    272281
     
    495504        rc = pVirtualBox->COMGETTER(EventSource)(pES.asOutParam());
    496505        AssertComRC(rc);
    497         mVmListener = new VmEventListenerImpl(this);
     506        ComObjPtr<VmEventListenerImpl> aVmListener;
     507        aVmListener.createObject();
     508        aVmListener->init(new VmEventListener(), this);
     509        mVmListener = aVmListener;
    498510        com::SafeArray<VBoxEventType_T> eventTypes;
    499511        eventTypes.push_back(VBoxEventType_OnNATRedirect);
    500512        eventTypes.push_back(VBoxEventType_OnHostPciDevicePlug);
    501         rc = pES->RegisterListener(mVmListener, ComSafeArrayAsInParam(eventTypes), true);
     513        rc = pES->RegisterListener(aVmListener, ComSafeArrayAsInParam(eventTypes), true);
    502514        AssertComRC(rc);
    503515    }
     
    548560            {
    549561                rc = pES->UnregisterListener(mVmListener);
    550                 // XXX: for some reasons we're getting VBOX_E_OBJECT_NOT_FOUND
    551                 // here - investigate
    552                 //AssertComRC(rc);
     562                AssertComRC(rc);
    553563            }
    554564        }
    555         mVmListener->Release();
    556         mVmListener = 0;
     565        mVmListener.setNull();
    557566    }
    558567
  • trunk/src/VBox/Main/src-client/ConsoleVRDPServer.cpp

    r35638 r35722  
    4444{
    4545public:
    46     VRDPConsoleListener(ConsoleVRDPServer *server)
    47         : m_server(server)
     46    VRDPConsoleListener()
     47    {
     48    }
     49
     50    HRESULT init(ConsoleVRDPServer *server)
     51    {
     52        m_server = server;
     53        return S_OK;
     54    }
     55
     56    void uninit()
    4857    {
    4958    }
     
    12901299        ComPtr<IEventSource> es;
    12911300        console->COMGETTER(EventSource)(es.asOutParam());
    1292         mConsoleListener = new VRDPConsoleListenerImpl(this);
     1301        ComObjPtr<VRDPConsoleListenerImpl> aConsoleListener;
     1302        aConsoleListener.createObject();
     1303        aConsoleListener->init(new VRDPConsoleListener(), this);
     1304        mConsoleListener = aConsoleListener;
    12931305        com::SafeArray <VBoxEventType_T> eventTypes;
    12941306        eventTypes.push_back(VBoxEventType_OnMousePointerShapeChanged);
     
    13141326        mConsole->COMGETTER(EventSource)(es.asOutParam());
    13151327        es->UnregisterListener(mConsoleListener);
    1316         mConsoleListener->Release();
    1317         mConsoleListener = NULL;
     1328        mConsoleListener.setNull();
    13181329    }
    13191330
  • trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp

    r35638 r35722  
    43924392
    43934393    AssertReturn(pvUser, VERR_INVALID_POINTER);
     4394   
     4395    com::Initialize();
    43944396
    43954397    // create an event queue for the current thread
     
    44064408
    44074409    delete eventQ;
     4410
     4411    com::Shutdown();
     4412
    44084413
    44094414    LogFlowFuncLeave();
  • trunk/src/VBox/Main/src-server/win/svcmain.cpp

    r35368 r35722  
    2020#include "VBox/com/defs.h"
    2121
     22#include "VBox/com/com.h"
     23
    2224#include "VBox/com/VirtualBox.h"
    2325
     
    157159    lpCmdLine = GetCommandLine(); /* this line necessary for _ATL_MIN_CRT */
    158160
    159 #if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
    160     HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    161 #else
    162     HRESULT hRes = CoInitialize(NULL);
    163 #endif
     161    HRESULT hRes = com::Initialize();
     162
    164163    _ASSERTE(SUCCEEDED(hRes));
    165164    _Module.Init(ObjectMap, hInstance, &LIBID_VirtualBox);
     
    277276
    278277    _Module.Term();
    279     CoUninitialize();
     278
     279    com::Shutdown();
     280
    280281    Log(("SVCMAIN: Returning, COM server process ends.\n"));
    281282    return nRet;
  • trunk/src/VBox/Main/webservice/vboxweb.cpp

    r35571 r35722  
    501501    {
    502502    }
     503
     504    HRESULT init()
     505    {
     506       return S_OK;
     507    }
     508
     509    void uninit()
     510    {
     511    }
     512
    503513
    504514    STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent)
     
    921931
    922932    /* VirtualBoxClient events registration. */
    923     IEventListener *vboxClientListener = NULL;
     933    ComPtr<IEventListener> vboxClientListener;
    924934    {
    925935        ComPtr<IEventSource> pES;
    926936        CHECK_ERROR(g_pVirtualBoxClient, COMGETTER(EventSource)(pES.asOutParam()));
    927         vboxClientListener = new VirtualBoxClientEventListenerImpl();
     937        ComObjPtr<VirtualBoxClientEventListenerImpl> clientListener;
     938        clientListener.createObject();
     939        clientListener->init(new VirtualBoxClientEventListener());
     940        vboxClientListener = clientListener;
    928941        com::SafeArray<VBoxEventType_T> eventTypes;
    929942        eventTypes.push_back(VBoxEventType_OnVBoxSVCAvailabilityChanged);
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