Changeset 107588 in vbox for trunk/src/VBox/Main/src-server
- Timestamp:
- Jan 9, 2025 11:04:40 AM (2 months ago)
- svn:sync-xref-src-repo-rev:
- 166661
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note:
See TracChangeset
for help on using the changeset viewer.