VirtualBox

Changeset 19161 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Apr 24, 2009 9:47:12 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
46441
Message:

#3860: SEGFAULT fix. Metric unregistration re-written.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/PerformanceImpl.cpp

    r19017 r19161  
    489489    AutoWriteLock alock (this);
    490490    LogAleksey(("{%p} " LOG_FN_FMT ": before remove_if: m.baseMetrics.size()=%d\n", this, __PRETTY_FUNCTION__, m.baseMetrics.size()));
    491     BaseMetricList::iterator it = std::remove_if (
    492         m.baseMetrics.begin(), m.baseMetrics.end(), std::bind2nd (
    493             std::mem_fun (&pm::BaseMetric::associatedWith), aObject));
    494     /* Delete the content of the list as well */
    495     BaseMetricList::iterator it1 = it;
    496     for (;it1 != m.baseMetrics.end(); ++it1)
    497         delete *it1;
    498     m.baseMetrics.erase(it, m.baseMetrics.end());
     491    BaseMetricList::iterator it;
     492    for (it = m.baseMetrics.begin(); it != m.baseMetrics.end();)
     493        if ((*it)->associatedWith(aObject))
     494        {
     495            delete *it;
     496            m.baseMetrics.erase(it++);
     497        }
     498        else
     499            ++it;
    499500    LogAleksey(("{%p} " LOG_FN_FMT ": after remove_if: m.baseMetrics.size()=%d\n", this, __PRETTY_FUNCTION__, m.baseMetrics.size()));
    500501    //LogFlowThisFuncLeave();
     
    509510    AutoWriteLock alock (this);
    510511    LogAleksey(("{%p} " LOG_FN_FMT ": obj=%p\n", this, __PRETTY_FUNCTION__, (void *)aObject));
    511     MetricList::iterator it = std::remove_if (
    512         m.metrics.begin(), m.metrics.end(), std::bind2nd (
    513             std::mem_fun (&pm::Metric::associatedWith), aObject));
    514     /* Delete the content of the list as well */
    515     MetricList::iterator it1 = it;
    516     for (;it1 != m.metrics.end(); ++it1)
    517         delete *it1;
    518     m.metrics.erase(it, m.metrics.end());
     512    MetricList::iterator it;
     513    for (it = m.metrics.begin(); it != m.metrics.end();)
     514        if ((*it)->associatedWith(aObject))
     515        {
     516            delete *it;
     517            m.metrics.erase(it++);
     518        }
     519        else
     520            ++it;
    519521    //LogFlowThisFuncLeave();
    520522}
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