summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net/passive_log_collector.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/net/passive_log_collector.cc')
-rw-r--r--chrome/browser/net/passive_log_collector.cc20
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);