Index: cc/base/list_container.cc |
diff --git a/cc/base/list_container.cc b/cc/base/list_container.cc |
index 65e28358b42483c734bc746ad7629739b983d2b8..80b341f78b6e8d119bf9150474a39e38d618a96d 100644 |
--- a/cc/base/list_container.cc |
+++ b/cc/base/list_container.cc |
@@ -171,9 +171,13 @@ class ListContainerBase::ListContainerCharAllocator { |
--size_; |
} |
- void Erase(PositionInListContainerCharAllocator position) { |
- DCHECK_EQ(this, position.ptr_to_container); |
- storage_[position.vector_index]->Erase(position.item_iterator); |
+ void Erase(PositionInListContainerCharAllocator* position) { |
+ DCHECK_EQ(this, position->ptr_to_container); |
+ InnerList* list = storage_[position->vector_index]; |
+ char* item_iterator = position->item_iterator; |
+ if (item_iterator == list->LastElement()) |
+ position->Increment(); |
+ list->Erase(item_iterator); |
// TODO(weiliangc): Free the InnerList if it is empty. |
--size_; |
} |
@@ -355,7 +359,7 @@ void ListContainerBase::RemoveLast() { |
} |
void ListContainerBase::EraseAndInvalidateAllPointers( |
- ListContainerBase::Iterator position) { |
+ ListContainerBase::Iterator* position) { |
data_->Erase(position); |
} |