Changeset 107588 in vbox
- Timestamp:
- Jan 9, 2025 11:04:40 AM (6 weeks ago)
- svn:sync-xref-src-repo-rev:
- 166661
- Location:
- trunk/src/VBox/Main
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/Makefile.kmk
r107362 r107588 214 214 ifdef VBOX_WITH_X86_ON_ARM_ENABLED 215 215 VBOX_MAIN_DEFS += VBOX_WITH_X86_ON_ARM_ENABLED 216 endif 217 ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 218 VBOX_MAIN_DEFS += VBOX_WITH_MAIN_OBJECT_TRACKER 216 219 endif 217 220 # Unconditionally enable the new semaphore key generation code … … 625 628 src-all/Logging.cpp \ 626 629 src-all/NvramStoreImpl.cpp \ 627 src-all/ObjectsTracker.cpp\630 $(if $(VBOX_WITH_MAIN_OBJECT_TRACKER),src-all/ObjectsTracker.cpp) \ 628 631 src-all/PCIDeviceAttachmentImpl.cpp \ 629 632 src-all/PlatformPropertiesImpl.cpp \ … … 1158 1161 src-all/Logging.cpp \ 1159 1162 src-all/NvramStoreImpl.cpp \ 1160 src-all/ObjectsTracker.cpp\1163 $(if $(VBOX_WITH_MAIN_OBJECT_TRACKER),src-all/ObjectsTracker.cpp) \ 1161 1164 src-all/PCIDeviceAttachmentImpl.cpp \ 1162 1165 src-all/PlatformPropertiesImpl.cpp \ … … 1338 1341 src-all/GlobalStatusConversion.cpp \ 1339 1342 src-all/AutoCaller.cpp \ 1340 src-all/ObjectsTracker.cpp\1343 $(if $(VBOX_WITH_MAIN_OBJECT_TRACKER),src-all/ObjectsTracker.cpp) \ 1341 1344 src-all/ThreadTask.cpp \ 1342 1345 src-all/VirtualBoxBase.cpp \ -
trunk/src/VBox/Main/include/VirtualBoxClientImpl.h
r106881 r107588 35 35 #include "EventImpl.h" 36 36 #include "VirtualBoxTranslator.h" 37 #include "ObjectsTracker.h" 37 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 38 # include "ObjectsTracker.h" 39 #endif 38 40 39 41 #ifdef RT_OS_WINDOWS … … 101 103 , m_pTrComponent(NULL) 102 104 #endif 105 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 103 106 , m_objectTrackerTask(NULL) 107 #endif 104 108 {} 105 109 … … 127 131 #endif 128 132 133 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 129 134 ObjectTracker *m_objectTrackerTask; 135 #endif 130 136 }; 131 137 -
trunk/src/VBox/Main/src-all/VirtualBoxBase.cpp
r106878 r107588 48 48 #include "Global.h" 49 49 #include "LoggingNew.h" 50 #include "ObjectsTracker.h" 50 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 51 # include "ObjectsTracker.h" 52 #endif 51 53 52 54 #include "VBox/com/ErrorInfo.h" … … 178 180 } 179 181 182 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 180 183 TrackedObjectsCollector gTrackedObjectsCollector; 184 #endif 181 185 182 186 HRESULT VirtualBoxBase::getObjectId(com::Guid &aId) … … 188 192 HRESULT VirtualBoxBase::setTracked(uint64_t aLifeTime, uint64_t afterLifeTime) 189 193 { 194 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 190 195 Utf8Str strObjId = mObjectId.toString(); 191 196 Utf8Str strClassIID = Guid(getClassIID()).toString(); … … 200 205 201 206 return hrc; 207 #else 208 RT_NOREF(aLifeTime, afterLifeTime); 209 return S_OK; 210 #endif 202 211 } 203 212 204 213 HRESULT VirtualBoxBase::invalidateTracked() 205 214 { 215 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 206 216 Utf8Str strObjId = mObjectId.toString(); 207 217 HRESULT hrc = gTrackedObjectsCollector.invalidateObj(strObjId); 208 218 209 219 return hrc; 220 #else 221 return S_OK; 222 #endif 210 223 } 211 224 -
trunk/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp
r106881 r107588 62 62 LONG VirtualBoxClient::s_cUnnecessaryAtlModuleLocks = 0; 63 63 64 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 64 65 extern TrackedObjectsCollector gTrackedObjectsCollector; 66 #endif 65 67 66 68 #ifdef VBOX_WITH_MAIN_NLS … … 206 208 #endif 207 209 210 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 208 211 /////////////// Try to start Object tracker thread as earlier as possible /////////////// 209 212 { 210 int vrc = 0;211 if (gTrackedObjectsCollector.init())213 int vrc = VERR_GENERAL_FAILURE; 214 if (gTrackedObjectsCollector.init()) 212 215 { 213 216 try 214 217 { 215 218 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 219 220 vrc = mData.m_objectTrackerTask->createThread(); // mData->m_objectTrackerTask1 is not consumed 220 221 } … … 227 228 mData.m_objectTrackerTask = NULL; 228 229 } 229 vrc = E_FAIL;230 vrc = VERR_UNEXPECTED_EXCEPTION; 230 231 } 231 232 } 232 233 233 if (RT_SUCCESS(vrc))234 if (RT_SUCCESS(vrc)) 234 235 LogRel(("Successfully started the Object tracker thread\n")); 235 236 else 236 237 LogRel(("Failed to start the Object tracker thread (%Rrc)\n", vrc)); 237 238 } 239 #endif 238 240 239 241 /* VirtualBox error return is postponed to method calls, fetch it. */ … … 627 629 } 628 630 631 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 629 632 if (mData.m_objectTrackerTask) 630 633 { … … 635 638 gTrackedObjectsCollector.uninit(); 636 639 } 640 #endif 637 641 638 642 #ifdef VBOX_WITH_MAIN_NLS -
trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp
r107553 r107588 108 108 #include "ThreadTask.h" 109 109 #include "VBoxEvents.h" 110 111 #include "ObjectsTracker.h" 110 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 111 # include "ObjectsTracker.h" 112 #endif 112 113 113 114 #include <QMTranslator.h> … … 133 134 //////////////////////////////////////////////////////////////////////////////// 134 135 136 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 135 137 extern TrackedObjectsCollector gTrackedObjectsCollector; 138 #endif 136 139 137 140 // static … … 334 337 , cRefsCrypto(0) 335 338 , pCryptoIf(NULL) 339 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 336 340 , objectTrackerTask(NULL) 341 #endif 337 342 { 338 343 #if defined(RT_OS_WINDOWS) && defined(VBOXSVC_WITH_CLIENT_WATCHER) … … 473 478 /** @} */ 474 479 480 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 475 481 /** The tracked object collector (better if it'll be a singleton) */ 476 ObjectTracker *objectTrackerTask; 482 ObjectTracker *objectTrackerTask; 483 #endif 477 484 }; 478 485 … … 569 576 LogFlowThisFunc(("Version: %s, Package: %s, API Version: %s\n", sVersion.c_str(), sPackageType.c_str(), sAPIVersion.c_str())); 570 577 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()) 575 583 { 576 584 LogRel(("Starting the Object tracker thread\n")); … … 578 586 { 579 587 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! 583 589 vrc = m->objectTrackerTask->createThread(); 584 590 } … … 594 600 } 595 601 } 596 597 if(RT_SUCCESS(vrc)) 602 if (RT_SUCCESS(vrc)) 598 603 LogRel(("Successfully started the Object tracker thread\n")); 599 604 else 600 605 LogRel(("Failed to start the Object tracker thread (%Rrc)\n", vrc)); 601 606 } 607 #endif 602 608 603 609 /* Important: DO NOT USE any kind of "early return" (except the single … … 1169 1175 1170 1176 m->mapProgressOperations.clear(); 1177 1178 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 1171 1179 /* 1172 1180 * Call gTrackedObjectsCollector uninitialization before ExtPackManager uninitialization!!! … … 1180 1188 gTrackedObjectsCollector.uninit(); 1181 1189 } 1190 #endif 1182 1191 1183 1192 #ifdef VBOX_WITH_EXTPACK … … 6449 6458 { 6450 6459 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 */ 6455 6463 std::vector<com::Utf8Str> lObjIdMap; 6456 6464 gTrackedObjectsCollector.getObjIdsByClassIID(IID_IProgress, lObjIdMap); 6457 6465 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())) 6461 6469 { 6462 6470 TrackedObjectData temp; … … 6468 6476 if (pProgress.isNotNull()) 6469 6477 { 6470 Bstr reqId(aId.toString().c_str());6478 com::Bstr reqId(aId.toString()); 6471 6479 Bstr foundId; 6472 6480 hrc = pProgress->COMGETTER(Id)(foundId.asOutParam()); … … 6489 6497 } 6490 6498 } 6491 #else 6499 6500 #else /* !VBOX_WITH_MAIN_OBJECT_TRACKER */ 6492 6501 /* protect mProgressOperations */ 6493 6502 AutoReadLock safeLock(m->mtxProgressOperations COMMA_LOCKVAL_SRC_POS); … … 6499 6508 return S_OK; 6500 6509 } 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 6516 HRESULT 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 6513 6523 TrackedObjectData trObjData; 6514 6524 HRESULT hrc = gTrackedObjectsCollector.getObj(aTrObjId, trObjData); … … 6524 6534 *aDeletionTime = RTTimeSpecGetMilli(&time); 6525 6535 } 6536 /** @todo aDeletionTime isn't set */ 6526 6537 } 6527 6538 6528 6539 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 6549 static std::map<com::Utf8Str, com::Utf8Str> const g_lMapInterfaceNameToIID = { 6533 6550 {"IProgress", Guid(IID_IProgress).toString()}, 6534 6551 {"ISession", Guid(IID_ISession).toString()}, … … 6536 6553 {"IMachine", Guid(IID_IMachine).toString()} 6537 6554 }; 6555 #endif 6538 6556 6539 6557 /** … … 6545 6563 * @return The list of the found objects Ids 6546 6564 */ 6547 HRESULT VirtualBox::getTrackedObjectIds (const com::Utf8Str& aName, 6548 std::vector<com::Utf8Str> &aObjIdsList) 6549 { 6565 HRESULT VirtualBox::getTrackedObjectIds(const com::Utf8Str &aName, 6566 std::vector<com::Utf8Str> &aObjIdsList) 6567 { 6568 #ifdef VBOX_WITH_MAIN_OBJECT_TRACKER 6550 6569 HRESULT hrc = S_OK; 6551 6570 … … 6553 6572 { 6554 6573 /* 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); 6558 6577 if (FAILED(hrc)) 6559 6578 hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No objects were found for the passed interface name '%s'."), … … 6569 6588 6570 6589 return hrc; 6590 6591 #else 6592 RT_NOREF(aName, aObjIdsList); 6593 return E_NOTIMPL; 6594 #endif 6571 6595 } 6572 6596 -
trunk/src/VBox/Main/testcase/Makefile.kmk
r106877 r107588 365 365 tstUnattendedScript.cpp \ 366 366 ../src-server/UnattendedScript.cpp \ 367 ../src-all/ObjectsTracker.cpp \368 367 ../src-all/TextScript.cpp \ 369 368 ../src-all/VirtualBoxBase.cpp \
Note:
See TracChangeset
for help on using the changeset viewer.