VirtualBox

Changeset 107588 in vbox


Ignore:
Timestamp:
Jan 9, 2025 11:04:40 AM (6 weeks 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

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/Makefile.kmk

    r107362 r107588  
    214214ifdef VBOX_WITH_X86_ON_ARM_ENABLED
    215215 VBOX_MAIN_DEFS += VBOX_WITH_X86_ON_ARM_ENABLED
     216endif
     217ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
     218 VBOX_MAIN_DEFS += VBOX_WITH_MAIN_OBJECT_TRACKER
    216219endif
    217220# Unconditionally enable the new semaphore key generation code
     
    625628        src-all/Logging.cpp \
    626629        src-all/NvramStoreImpl.cpp \
    627         src-all/ObjectsTracker.cpp \
     630        $(if $(VBOX_WITH_MAIN_OBJECT_TRACKER),src-all/ObjectsTracker.cpp) \
    628631        src-all/PCIDeviceAttachmentImpl.cpp \
    629632        src-all/PlatformPropertiesImpl.cpp \
     
    11581161        src-all/Logging.cpp \
    11591162        src-all/NvramStoreImpl.cpp \
    1160         src-all/ObjectsTracker.cpp \
     1163        $(if $(VBOX_WITH_MAIN_OBJECT_TRACKER),src-all/ObjectsTracker.cpp) \
    11611164        src-all/PCIDeviceAttachmentImpl.cpp \
    11621165        src-all/PlatformPropertiesImpl.cpp \
     
    13381341        src-all/GlobalStatusConversion.cpp \
    13391342        src-all/AutoCaller.cpp \
    1340         src-all/ObjectsTracker.cpp \
     1343        $(if $(VBOX_WITH_MAIN_OBJECT_TRACKER),src-all/ObjectsTracker.cpp) \
    13411344        src-all/ThreadTask.cpp \
    13421345        src-all/VirtualBoxBase.cpp \
  • trunk/src/VBox/Main/include/VirtualBoxClientImpl.h

    r106881 r107588  
    3535#include "EventImpl.h"
    3636#include "VirtualBoxTranslator.h"
    37 #include "ObjectsTracker.h"
     37#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
     38# include "ObjectsTracker.h"
     39#endif
    3840
    3941#ifdef RT_OS_WINDOWS
     
    101103            , m_pTrComponent(NULL)
    102104#endif
     105#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    103106            , m_objectTrackerTask(NULL)
     107#endif
    104108        {}
    105109
     
    127131#endif
    128132
     133#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    129134        ObjectTracker *m_objectTrackerTask;
     135#endif
    130136    };
    131137
  • trunk/src/VBox/Main/src-all/VirtualBoxBase.cpp

    r106878 r107588  
    4848#include "Global.h"
    4949#include "LoggingNew.h"
    50 #include "ObjectsTracker.h"
     50#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
     51# include "ObjectsTracker.h"
     52#endif
    5153
    5254#include "VBox/com/ErrorInfo.h"
     
    178180}
    179181
     182#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    180183TrackedObjectsCollector gTrackedObjectsCollector;
     184#endif
    181185
    182186HRESULT VirtualBoxBase::getObjectId(com::Guid &aId)
     
    188192HRESULT VirtualBoxBase::setTracked(uint64_t aLifeTime, uint64_t afterLifeTime)
    189193{
     194#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    190195    Utf8Str strObjId = mObjectId.toString();
    191196    Utf8Str strClassIID = Guid(getClassIID()).toString();
     
    200205
    201206    return hrc;
     207#else
     208    RT_NOREF(aLifeTime, afterLifeTime);
     209    return S_OK;
     210#endif
    202211}
    203212
    204213HRESULT VirtualBoxBase::invalidateTracked()
    205214{
     215#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    206216    Utf8Str strObjId = mObjectId.toString();
    207217    HRESULT hrc = gTrackedObjectsCollector.invalidateObj(strObjId);
    208218
    209219    return hrc;
     220#else
     221    return S_OK;
     222#endif
    210223}
    211224
  • trunk/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp

    r106881 r107588  
    6262LONG VirtualBoxClient::s_cUnnecessaryAtlModuleLocks = 0;
    6363
     64#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    6465extern TrackedObjectsCollector gTrackedObjectsCollector;
     66#endif
    6567
    6668#ifdef VBOX_WITH_MAIN_NLS
     
    206208#endif
    207209
     210#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    208211        /////////////// Try to start Object tracker thread as earlier as possible ///////////////
    209212        {
    210             int vrc = 0;
    211             if(gTrackedObjectsCollector.init())
     213            int vrc = VERR_GENERAL_FAILURE;
     214            if (gTrackedObjectsCollector.init())
    212215            {
    213216                try
    214217                {
    215218                    mData.m_objectTrackerTask = new ObjectTracker();
    216                     if (!mData.m_objectTrackerTask->init()) // some init procedure
    217                         vrc = E_FAIL;
    218                     else
     219                    if (mData.m_objectTrackerTask->init()) // some init procedure
    219220                        vrc = mData.m_objectTrackerTask->createThread(); // mData->m_objectTrackerTask1 is not consumed
    220221                }
     
    227228                        mData.m_objectTrackerTask = NULL;
    228229                    }
    229                     vrc = E_FAIL;
     230                    vrc = VERR_UNEXPECTED_EXCEPTION;
    230231                }
    231232            }
    232233
    233             if(RT_SUCCESS(vrc))
     234            if (RT_SUCCESS(vrc))
    234235                LogRel(("Successfully started the Object tracker thread\n"));
    235236            else
    236237                LogRel(("Failed to start the Object tracker thread (%Rrc)\n", vrc));
    237238        }
     239#endif
    238240
    239241        /* VirtualBox error return is postponed to method calls, fetch it. */
     
    627629    }
    628630
     631#ifdef VBOX_WITH_MAIN_OBJECT_TRACKER
    629632    if (mData.m_objectTrackerTask)
    630633    {
     
    635638        gTrackedObjectsCollector.uninit();
    636639    }
     640#endif
    637641
    638642#ifdef VBOX_WITH_MAIN_NLS
  • 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
  • trunk/src/VBox/Main/testcase/Makefile.kmk

    r106877 r107588  
    365365        tstUnattendedScript.cpp \
    366366        ../src-server/UnattendedScript.cpp \
    367         ../src-all/ObjectsTracker.cpp \
    368367        ../src-all/TextScript.cpp \
    369368        ../src-all/VirtualBoxBase.cpp \
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