Changeset 106903 in vbox for trunk/src/VBox/Main/src-all
- Timestamp:
- Nov 9, 2024 12:38:48 AM (6 months ago)
- svn:sync-xref-src-repo-rev:
- 165826
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/src-all/ObjectsTracker.cpp
r106901 r106903 35 35 #include <iprt/time.h> 36 36 #include <iprt/asm.h> 37 38 typedef std::map<ObjIdString_T, TrackedObjectData>::const_iterator ConstIterTrObjDataType; 39 typedef std::map<ObjIdString_T, TrackedObjectData>::iterator iterTrObjDataType; 37 #include <stdexcept> 38 39 typedef std::map<com::Utf8Str, TrackedObjectData>::iterator IterTrObjData_T; 40 typedef std::map<com::Utf8Str, TrackedObjectData>::const_iterator ConstIterTrObjData_T; 40 41 41 42 ///////////////////////////////////////////////////////////////////////////// … … 317 318 } 318 319 319 HRESULT TrackedObjectsCollector::getObj (const com::Utf8Str&aObjId,320 TrackedObjectData&aObjData,321 320 HRESULT TrackedObjectsCollector::getObj(const com::Utf8Str &aObjId, 321 TrackedObjectData &aObjData, 322 bool fUpdate) 322 323 { 323 324 LogFlowFuncEnter(); … … 330 331 RTCritSectEnter(&m_CritSectData); 331 332 332 ObjIdString_T sTemp(aObjId.c_str());333 333 HRESULT hrc = E_FAIL; 334 334 335 iterTrObjDataType pIter = m_trackedObjectsData.find(sTemp);335 IterTrObjData_T pIter = m_trackedObjectsData.find(aObjId); 336 336 if (pIter != m_trackedObjectsData.end() && fUpdate == true) 337 337 { … … 342 342 } 343 343 344 if (RT_SUCCESS(vrc)) 345 { 344 if (RT_SUCCESS(vrc)) /** @todo r=bird: This won't ever fail. Did you mixup vrc and hrc above? */ 345 { 346 /** @todo r=bird: Why do three lookups? */ 346 347 if ( i_getObj(aObjId).getInterface().isNotNull() ) 347 348 { … … 368 369 { 369 370 /* No check for existence of aObjId */ 371 #if 0 /* the solaris VM's stl_map.h code doesn't have any at() function. */ 370 372 return m_trackedObjectsData.at(aObjId); 373 #else 374 ConstIterTrObjData_T const Iter = m_trackedObjectsData.find(aObjId); 375 if (Iter == m_trackedObjectsData.cend()) 376 throw std::out_of_range(aObjId.c_str()); 377 return (*Iter).second; 378 #endif 371 379 } 372 380 … … 384 392 RTCritSectEnter(&m_CritSectData); 385 393 386 ObjIdString_T sTemp(aObjId.c_str()); 387 388 iterTrObjDataType pIter = m_trackedObjectsData.find(sTemp); 394 IterTrObjData_T pIter = m_trackedObjectsData.find(aObjId); 389 395 if (pIter != m_trackedObjectsData.end()) 390 396 { … … 404 410 } 405 411 406 HRESULT TrackedObjectsCollector::removeObj (const com::Utf8Str&aObjId)412 HRESULT TrackedObjectsCollector::removeObj(const com::Utf8Str &aObjId) 407 413 { 408 414 Log2(("%s: object Id %s\n", __FUNCTION__, aObjId.c_str())); … … 412 418 if (RT_FAILURE(vrc)) 413 419 return VBOX_E_INVALID_OBJECT_STATE; 414 415 ObjIdString_T sTemp(aObjId.c_str());416 420 417 421 vrc = VERR_NOT_FOUND; … … 420 424 RTCritSectEnter(&m_CritSectData); 421 425 422 ConstIterTrObjDataType pIter = m_trackedObjectsData.find(sTemp);423 if ( pIter != m_trackedObjectsData.end())426 IterTrObjData_T Iter = m_trackedObjectsData.find(aObjId); 427 if (Iter != m_trackedObjectsData.end()) 424 428 { 425 429 Log2(("RELEASED TrackedObjectData: creation time %s, object Id %s, class IID %s\n", 426 pIter->second.creationTimeStr().c_str(), pIter->second.objectIdStr().c_str(), pIter->second.classIIDStr().c_str()));427 428 m_trackedObjectsData.erase( pIter);430 Iter->second.creationTimeStr().c_str(), Iter->second.objectIdStr().c_str(), Iter->second.classIIDStr().c_str())); 431 432 m_trackedObjectsData.erase(Iter); 429 433 m_trackedObjectIds.erase(aObjId); 430 434 m_trackedInvalidObjectIds.erase(aObjId); … … 499 503 } 500 504 501 int TrackedObjectsCollector::i_getObjIdsByClassIID (const Guid& iid, 502 std::vector<com::Utf8Str>& aObjIdMap) const 503 { 504 for (const std::pair<const ObjIdString_T, TrackedObjectData> &item : m_trackedObjectsData) 505 int TrackedObjectsCollector::i_getObjIdsByClassIID(const Guid &aIId, std::vector<com::Utf8Str> &aObjIdMap) const 506 { 507 //for (const std::pair<const com::Utf8Str, TrackedObjectData> &item : m_trackedObjectsData) - the gcc in the solaris VM doesn't grok this. 508 for (ConstIterTrObjData_T Iter = m_trackedObjectsData.cbegin(); 509 Iter != m_trackedObjectsData.cend(); 510 ++Iter) 505 511 { 506 512 /* IID found and the object is valid */ 507 if ( item.second.classIID() == iid && !m_trackedInvalidObjectIds.count(item.first.c_str()))508 aObjIdMap.push_back( item.first.c_str());513 if (Iter->second.classIID() == aIId && !m_trackedInvalidObjectIds.count(Iter->first)) 514 aObjIdMap.push_back(Iter->first); 509 515 } 510 516 … … 512 518 } 513 519 514 bool TrackedObjectsCollector::checkObj(const com::Utf8Str &aObjId)520 bool TrackedObjectsCollector::checkObj(const com::Utf8Str &aObjId) 515 521 { 516 522 Log2(("%s: Checking object with Id %s\n", __FUNCTION__, aObjId.c_str())); … … 604 610 RTCritSectEnter(&m_CritSectData); 605 611 606 iterTrObjDataTypepIter = m_trackedObjectsData.find(aObjId.c_str());612 IterTrObjData_T pIter = m_trackedObjectsData.find(aObjId.c_str()); 607 613 if (pIter != m_trackedObjectsData.end()) 608 614 { … … 651 657 LogFlowFuncEnter(); 652 658 653 HRESULT hrc = S_OK;654 659 int vrc = i_checkInitialization(); 655 660 if (RT_FAILURE(vrc)) … … 659 664 RTCritSectEnter(&m_CritSectData); 660 665 661 ObjIdString_T sTemp(aObjId.c_str()); 662 vrc = VERR_NOT_FOUND; 663 664 iterTrObjDataType pIter = m_trackedObjectsData.find(sTemp); 666 HRESULT hrc = VBOX_E_OBJECT_NOT_FOUND; 667 IterTrObjData_T pIter = m_trackedObjectsData.find(aObjId); 665 668 if (pIter != m_trackedObjectsData.end()) 666 669 { 667 670 pIter->second.resetState(); 668 671 m_trackedInvalidObjectIds.insert(aObjId); 669 vrc = VINF_SUCCESS; 670 } 671 672 if (RT_FAILURE(vrc)) 673 hrc = VBOX_E_OBJECT_NOT_FOUND; 672 hrc = S_OK; 673 } 674 674 675 675 /* Leave critical section here */ … … 723 723 { 724 724 std::vector<com::Utf8Str> lObjIdMap; 725 726 725 hrc = gTrackedObjectsCollector.getAllObjIds(lObjIdMap); 727 for (const com::Utf8Str& item : lObjIdMap) 726 727 //for (const com::Utf8Str& item : lObjIdMap) - the gcc in the solaris VM doesn't grok this. 728 for (std::vector<com::Utf8Str>::const_iterator Iter = lObjIdMap.cbegin(); 729 Iter != lObjIdMap.cend(); 730 ++Iter) 728 731 { 729 732 TrackedObjectData temp; 730 if(gTrackedObjectsCollector.checkObj( item.c_str()))733 if(gTrackedObjectsCollector.checkObj(*Iter)) 731 734 { 732 hrc = gTrackedObjectsCollector.getObj( item.c_str(), temp);735 hrc = gTrackedObjectsCollector.getObj(*Iter, temp); 733 736 if (SUCCEEDED(hrc)) 734 737 { … … 762 765 if (temp.m_fIdleTimeStart == false) 763 766 { 764 gTrackedObjectsCollector.initObjIdleTime( item);765 Log2(("Idle time for the object with Id %s has been started\n", item.c_str()));767 gTrackedObjectsCollector.initObjIdleTime(*Iter); 768 Log2(("Idle time for the object with Id %s has been started\n", Iter->c_str())); 766 769 } 767 770 else … … 773 776 { 774 777 Log2(("Object with Id %s removed from Object Collector " 775 "(recount is %u, idle time exceeded %u sec)\n", item.c_str(), cRefs - 1, temp.m_idleTime));776 gTrackedObjectsCollector.removeObj( item.c_str());778 "(recount is %u, idle time exceeded %u sec)\n", Iter->c_str(), cRefs - 1, temp.m_idleTime)); 779 gTrackedObjectsCollector.removeObj(*Iter); 777 780 } 778 781 } … … 804 807 { 805 808 Log2(("Object with Id %s removed from Object Collector " 806 "(lifetime exceeded %u sec)\n", item.c_str(), temp.m_lifeTime));807 gTrackedObjectsCollector.removeObj( item.c_str());809 "(lifetime exceeded %u sec)\n", Iter->c_str(), temp.m_lifeTime)); 810 gTrackedObjectsCollector.removeObj(*Iter); 808 811 } 809 812 } … … 812 815 } 813 816 else 814 Log2(("Tracked Object with ID %s was not found\n", item.c_str()));817 Log2(("Tracked Object with ID %s was not found\n", Iter->c_str())); 815 818 } 816 819
Note:
See TracChangeset
for help on using the changeset viewer.