Index: chrome/browser/extensions/lazy_background_task_queue.cc |
diff --git a/chrome/browser/extensions/lazy_background_task_queue.cc b/chrome/browser/extensions/lazy_background_task_queue.cc |
index b98d44626be848a3a2db04c60ac4cb11ea981243..49bc2229325ce5ba975de4d76347a388a598e86d 100644 |
--- a/chrome/browser/extensions/lazy_background_task_queue.cc |
+++ b/chrome/browser/extensions/lazy_background_task_queue.cc |
@@ -115,14 +115,16 @@ void LazyBackgroundTaskQueue::ProcessPendingTasks( |
return; |
} |
- PendingTasksList* tasks = map_it->second.get(); |
- for (PendingTasksList::const_iterator it = tasks->begin(); |
- it != tasks->end(); ++it) { |
+ // Swap the pending tasks to a temporary, to avoid problems if the task |
+ // list is modified during processing. |
+ PendingTasksList tasks; |
+ tasks.swap(*map_it->second); |
+ for (PendingTasksList::const_iterator it = tasks.begin(); |
+ it != tasks.end(); ++it) { |
it->Run(host); |
} |
- tasks->clear(); |
- pending_tasks_.erase(map_it); |
+ pending_tasks_.erase(key); |
// Balance the keepalive in AddPendingTask. Note we don't do this on a |
// failure to load, because the keepalive count is reset in that case. |