| Index: chrome/browser/net/passive_log_collector.cc
|
| ===================================================================
|
| --- chrome/browser/net/passive_log_collector.cc (revision 65117)
|
| +++ chrome/browser/net/passive_log_collector.cc (working copy)
|
| @@ -289,6 +289,15 @@
|
| }
|
| }
|
|
|
| +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 @@
|
| 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 @@
|
| 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);
|
|
|