diff options
Diffstat (limited to 'chrome/browser/net/passive_log_collector.cc')
-rw-r--r-- | chrome/browser/net/passive_log_collector.cc | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/chrome/browser/net/passive_log_collector.cc b/chrome/browser/net/passive_log_collector.cc index 2aca24f..84a9403 100644 --- a/chrome/browser/net/passive_log_collector.cc +++ b/chrome/browser/net/passive_log_collector.cc @@ -289,6 +289,15 @@ void PassiveLogCollector::SourceTracker::AddToDeletionQueue( } } +void PassiveLogCollector::SourceTracker::EraseFromDeletionQueue( + uint32 source_id) { + DeletionQueue::iterator it = + std::remove(deletion_queue_.begin(), deletion_queue_.end(), + source_id); + DCHECK(it != deletion_queue_.end()); + deletion_queue_.erase(it); +} + void PassiveLogCollector::SourceTracker::AdjustReferenceCountForSource( int offset, uint32 source_id) { DCHECK(offset == -1 || offset == 1) << "invalid offset: " << offset; @@ -306,7 +315,8 @@ void PassiveLogCollector::SourceTracker::AdjustReferenceCountForSource( DCHECK_GE(info.reference_count, 0); info.reference_count += offset; - if (info.reference_count < 0) { + bool released_unmatched_reference = info.reference_count < 0; + if (released_unmatched_reference) { // In general this shouldn't happen, however it is possible to reach this // state if SourceTracker::Clear() was called earlier. LOG(WARNING) << "Released unmatched reference count."; @@ -317,12 +327,10 @@ void PassiveLogCollector::SourceTracker::AdjustReferenceCountForSource( if (info.reference_count == 1 && offset == 1) { // If we just added a reference to a dead source that had no references, // it must have been in the deletion queue, so remove it from the queue. - DeletionQueue::iterator it = - std::remove(deletion_queue_.begin(), deletion_queue_.end(), - source_id); - DCHECK(it != deletion_queue_.end()); - deletion_queue_.erase(it); + EraseFromDeletionQueue(source_id); } else if (info.reference_count == 0) { + if (released_unmatched_reference) + EraseFromDeletionQueue(source_id); // If we just released the final reference to a dead source, go ahead // and delete it right away. DeleteSourceInfo(source_id); |