VirtualBox

Changeset 107588 in vbox for trunk/src/VBox/Main/src-server


Ignore:
Timestamp:
Jan 9, 2025 11:04:40 AM (2 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
166661
Message:

Main,Puel: Made the object tracker code a compile time option (VBOX_WITH_MAIN_OBJECT_TRACKER) and disabled it since it causes VBoxSVC to crash during uninit. It is also badly in need of a review + style-cleanup (did some). Making it optional eliminates the need for Puel to include the object tracker code which it won't need (neither does VBoxC/Client.dll). bugref:10806

File:
1 edited

Legend:

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

    r107553 r107588  
    108108#include "ThreadTask.h"
    109109#include "VBoxEvents.h"
    110 
    111 #include "ObjectsTracker.h"
     110#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
     111# include "ObjectsTracker.h"
     112#endif
    112113
    113114#include <QMTranslator.h>
     
    133134////////////////////////////////////////////////////////////////////////////////
    134135
     136#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    135137extern TrackedObjectsCollector gTrackedObjectsCollector;
     138#endif
    136139
    137140// static
     
    334337        , cRefsCrypto(0)
    335338        , pCryptoIf(NULL)
     339#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    336340        , objectTrackerTask(NULL)
     341#endif
    337342    {
    338343#if defined(RT_OS_WINDOWS) && defined(VBOXSVC_WITH_CLIENT_WATCHER)
     
    473478    /** @} */
    474479
     480#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    475481    /** The tracked object collector (better if it'll be a singleton) */
    476     ObjectTracker *objectTrackerTask;
     482    ObjectTracker                      *objectTrackerTask;
     483#endif
    477484};
    478485
     
    569576    LogFlowThisFunc(("Version: %s, Package: %s, API Version: %s\n", sVersion.c_str(), sPackageType.c_str(), sAPIVersion.c_str()));
    570577
    571     /* Try to start Object tracker thread as earlier as possible */
    572     {
    573         int vrc = 0;
    574         if(gTrackedObjectsCollector.init())
     578#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
     579    /* Try to start Object tracker thread as earlier as possible (same code in VirtualBoxClientImpl.cpp). */
     580    {
     581        int vrc = VERR_GENERAL_FAILURE;
     582        if (gTrackedObjectsCollector.init())
    575583        {
    576584            LogRel(("Starting the Object tracker thread\n"));
     
    578586            {
    579587                m->objectTrackerTask = new ObjectTracker();
    580                 if (!m->objectTrackerTask->init()) // some init procedure
    581                     vrc = VERR_INVALID_STATE;
    582                 else
     588                if (m->objectTrackerTask->init()) // some init procedure - bird: some comment!
    583589                    vrc = m->objectTrackerTask->createThread();
    584590            }
     
    594600            }
    595601        }
    596 
    597         if(RT_SUCCESS(vrc))
     602        if (RT_SUCCESS(vrc))
    598603            LogRel(("Successfully started the Object tracker thread\n"));
    599604        else
    600605            LogRel(("Failed to start the Object tracker thread (%Rrc)\n", vrc));
    601606    }
     607#endif
    602608
    603609    /* Important: DO NOT USE any kind of "early return" (except the single
     
    11691175
    11701176    m->mapProgressOperations.clear();
     1177
     1178#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    11711179    /*
    11721180     * Call gTrackedObjectsCollector uninitialization before ExtPackManager uninitialization!!!
     
    11801188        gTrackedObjectsCollector.uninit();
    11811189    }
     1190#endif
    11821191
    11831192#ifdef VBOX_WITH_EXTPACK
     
    64496458{
    64506459    if (!aId.isValid())
    6451         return setError(E_INVALIDARG,
    6452                         tr("The provided progress object GUID is invalid"));
    6453 
    6454 #ifdef VBOX_WITH_OBJ_TRACKER
     6460        return setError(E_INVALIDARG, tr("The provided progress object GUID is invalid"));
     6461
     6462#if 0 /** @todo def VBOX_WITH_MAIN_OBJECT_TRACKER - never used */
    64556463    std::vector<com::Utf8Str> lObjIdMap;
    64566464    gTrackedObjectsCollector.getObjIdsByClassIID(IID_IProgress, lObjIdMap);
    64576465
    6458     for (const com::Utf8Str& item : lObjIdMap)
    6459     {
    6460         if(gTrackedObjectsCollector.checkObj(item.c_str()))
     6466    for (const com::Utf8Str &item : lObjIdMap)
     6467    {
     6468        if (gTrackedObjectsCollector.checkObj(item.c_str()))
    64616469        {
    64626470            TrackedObjectData temp;
     
    64686476            if (pProgress.isNotNull())
    64696477            {
    6470                 Bstr reqId(aId.toString().c_str());
     6478                com::Bstr reqId(aId.toString());
    64716479                Bstr foundId;
    64726480                hrc = pProgress->COMGETTER(Id)(foundId.asOutParam());
     
    64896497        }
    64906498    }
    6491 #else
     6499
     6500#else /* !VBOX_WITH_MAIN_OBJECT_TRACKER */
    64926501    /* protect mProgressOperations */
    64936502    AutoReadLock safeLock(m->mtxProgressOperations COMMA_LOCKVAL_SRC_POS);
     
    64996508        return S_OK;
    65006509    }
    6501 #endif
    6502 
    6503     return setError(E_INVALIDARG,
    6504                     tr("The progress object with the given GUID could not be found"));
    6505 }
    6506 
    6507 HRESULT VirtualBox::getTrackedObject (const com::Utf8Str& aTrObjId,
    6508                                       ComPtr<IUnknown> &aPIface,
    6509                                       TrackedObjectState_T *aState,
    6510                                       LONG64 *aCreationTime,
    6511                                       LONG64 *aDeletionTime)
    6512 {
     6510#endif /* !VBOX_WITH_MAIN_OBJECT_TRACKER */
     6511
     6512    /** @todo r=bird: E_INVALIDARG isn't a good choice here... */
     6513    return setError(E_INVALIDARG, tr("The progress object with the given GUID could not be found"));
     6514}
     6515
     6516HRESULT VirtualBox::getTrackedObject(const com::Utf8Str &aTrObjId,
     6517                                     ComPtr<IUnknown> &aPIface,
     6518                                     TrackedObjectState_T *aState,
     6519                                     LONG64 *aCreationTime,
     6520                                     LONG64 *aDeletionTime)
     6521{
     6522#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    65136523    TrackedObjectData trObjData;
    65146524    HRESULT hrc = gTrackedObjectsCollector.getObj(aTrObjId, trObjData);
     
    65246534            *aDeletionTime = RTTimeSpecGetMilli(&time);
    65256535        }
     6536        /** @todo aDeletionTime isn't set */
    65266537    }
    65276538
    65286539    return hrc;
    6529 }
    6530 
    6531 
    6532 std::map <com::Utf8Str, com::Utf8Str> lMapInterfaceNameToIID = {
     6540
     6541#else
     6542    RT_NOREF(aTrObjId, aPIface, aState, aCreationTime, aDeletionTime);
     6543    return E_NOTIMPL;
     6544#endif
     6545}
     6546
     6547
     6548#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
     6549static std::map<com::Utf8Str, com::Utf8Str> const g_lMapInterfaceNameToIID = {
    65336550    {"IProgress", Guid(IID_IProgress).toString()},
    65346551    {"ISession", Guid(IID_ISession).toString()},
     
    65366553    {"IMachine", Guid(IID_IMachine).toString()}
    65376554};
     6555#endif
    65386556
    65396557/**
     
    65456563 * @return The list of the found objects Ids
    65466564 */
    6547 HRESULT VirtualBox::getTrackedObjectIds (const com::Utf8Str& aName,
    6548                                          std::vector<com::Utf8Str> &aObjIdsList)
    6549 {
     6565HRESULT VirtualBox::getTrackedObjectIds(const com::Utf8Str &aName,
     6566                                        std::vector<com::Utf8Str> &aObjIdsList)
     6567{
     6568#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    65506569    HRESULT hrc = S_OK;
    65516570
     
    65536572    {
    65546573        /* Check the supported tracked classes to avoid "out of range" exception */
    6555         if (lMapInterfaceNameToIID.count(aName))
    6556         {
    6557             hrc = gTrackedObjectsCollector.getObjIdsByClassIID(lMapInterfaceNameToIID.at(aName), aObjIdsList);
     6574        if (g_lMapInterfaceNameToIID.count(aName))
     6575        {
     6576            hrc = gTrackedObjectsCollector.getObjIdsByClassIID(g_lMapInterfaceNameToIID.at(aName), aObjIdsList);
    65586577            if (FAILED(hrc))
    65596578                hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No objects were found for the passed interface name '%s'."),
     
    65696588
    65706589    return hrc;
     6590
     6591#else
     6592    RT_NOREF(aName, aObjIdsList);
     6593    return E_NOTIMPL;
     6594#endif
    65716595}
    65726596
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