Index: chrome/common/instant_restricted_id_cache.h |
diff --git a/chrome/common/instant_restricted_id_cache.h b/chrome/common/instant_restricted_id_cache.h |
index b0c2b3ba05e44eb294577ccdb18d3ad7222274b4..5935ea29c09eb250d2892bab60dec4fc58f0b538 100644 |
--- a/chrome/common/instant_restricted_id_cache.h |
+++ b/chrome/common/instant_restricted_id_cache.h |
@@ -69,6 +69,8 @@ class InstantRestrictedIDCache { |
FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, ManualIDGeneration); |
FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, MixIDGeneration); |
FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, AddEmptySet); |
+ FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, |
+ AddItemsWithRestrictedID); |
typedef base::MRUCache<InstantRestrictedID, T> CacheImpl; |
@@ -126,10 +128,15 @@ void InstantRestrictedIDCache<T>::AddItemsWithRestrictedID( |
ids_added.insert(item_id.first); |
cache_.Put(item_id.first, item_id.second); |
- if (i == 0) |
- last_add_start_ = --cache_.rend(); |
last_restricted_id_ = std::max(item_id.first, last_restricted_id_); |
} |
+ |
+ // cache_.Put() can invalidate the iterator |last_add_start_| is pointing to. |
+ // Therefore, update |last_add_start_| after adding all the items to the |
+ // |cache_|. |
+ last_add_start_ = cache_.rend(); |
+ for (size_t i = 0; i < items.size(); ++i) |
+ --last_add_start_; |
} |
template <typename T> |