summaryrefslogtreecommitdiffstats
path: root/webkit/dom_storage
diff options
context:
space:
mode:
authormarja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-01 02:20:13 +0000
committermarja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-01 02:20:13 +0000
commit76770179bfff5c8d190c7b87a4e8cd34808c306b (patch)
tree65e36dc112751e520a21920d4b043f19ddd40e3b /webkit/dom_storage
parent4ac5fbe64fa354cb0f53ac0ac662a316ae77df56 (diff)
downloadchromium_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.cc5
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();