diff options
author | marja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-01 02:20:13 +0000 |
---|---|---|
committer | marja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-01 02:20:13 +0000 |
commit | 76770179bfff5c8d190c7b87a4e8cd34808c306b (patch) | |
tree | 65e36dc112751e520a21920d4b043f19ddd40e3b /webkit/dom_storage | |
parent | 4ac5fbe64fa354cb0f53ac0ac662a316ae77df56 (diff) | |
download | chromium_src-76770179bfff5c8d190c7b87a4e8cd34808c306b.zip chromium_src-76770179bfff5c8d190c7b87a4e8cd34808c306b.tar.gz chromium_src-76770179bfff5c8d190c7b87a4e8cd34808c306b.tar.bz2 |
DomStorageContext: Fix a crash when scavenging session storages.
The scavenging will go wrong at least if StartScavengingUnusedSessionStorage is
called more than once. A separate CL will add debugging information to find out
if that happens and why.
Kudos to eroman@chromium.org for finding the cause.
BUG=145068
Review URL: https://chromiumcodereview.appspot.com/10917034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154572 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/dom_storage')
-rw-r--r-- | webkit/dom_storage/dom_storage_context.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/webkit/dom_storage/dom_storage_context.cc b/webkit/dom_storage/dom_storage_context.cc index afb7c59..9b4b7cb 100644 --- a/webkit/dom_storage/dom_storage_context.cc +++ b/webkit/dom_storage/dom_storage_context.cc @@ -304,7 +304,8 @@ void DomStorageContext::StartScavengingUnusedSessionStorage() { void DomStorageContext::FindUnusedNamespaces() { DCHECK(session_storage_database_.get()); - DCHECK(!scavenging_started_); + if (scavenging_started_) + return; scavenging_started_ = true; std::set<std::string> namespace_ids_in_use; for (StorageNamespaceMap::const_iterator it = namespaces_.begin(); @@ -355,6 +356,8 @@ void DomStorageContext::DeleteNextUnusedNamespace() { } void DomStorageContext::DeleteNextUnusedNamespaceInCommitSequence() { + if (deletable_persistent_namespace_ids_.empty()) + return; const std::string& persistent_id = deletable_persistent_namespace_ids_.back(); session_storage_database_->DeleteNamespace(persistent_id); deletable_persistent_namespace_ids_.pop_back(); |