Commit 8008668d authored by Daniel Murphy's avatar Daniel Murphy Committed by Commit Bot

[IndexedDB] Stop requesting locks in the Delete request.

Locks were assumed to be granted synchronously when all previous locks
were destructed. This isn't the case when there is a chain of dependent
locks, as granting a lock posts a task.

Since the delete code doesn't need a transaction to work (yet), remove
the locks here, and refactor this area for the new Scopes integration.

R=pwnall@chromium.org

Bug: 945370
Change-Id: Ifce3163852db6b2eae2127ee7062e788a19b9546
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1539211Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Commit-Queue: Victor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#644653}
parent 48a3d843
...@@ -332,13 +332,7 @@ class IndexedDBDatabase::DeleteRequest ...@@ -332,13 +332,7 @@ class IndexedDBDatabase::DeleteRequest
void Perform() override { void Perform() override {
if (db_->connections_.empty()) { if (db_->connections_.empty()) {
// No connections, so delete immediately. // No connections, so delete immediately.
std::vector<ScopesLockManager::ScopeLockRequest> lock_requests = { DoDelete();
{kDatabaseRangeLockLevel, GetDatabaseLockRange(db_->metadata_.id),
ScopesLockManager::LockType::kExclusive}};
db_->lock_manager_->AcquireLocks(
std::move(lock_requests),
base::BindOnce(&IndexedDBDatabase::DeleteRequest::DoDelete,
weak_factory_.GetWeakPtr()));
return; return;
} }
...@@ -358,16 +352,10 @@ class IndexedDBDatabase::DeleteRequest ...@@ -358,16 +352,10 @@ class IndexedDBDatabase::DeleteRequest
if (!db_->connections_.empty()) if (!db_->connections_.empty())
return; return;
std::vector<ScopesLockManager::ScopeLockRequest> lock_requests = { DoDelete();
{kDatabaseRangeLockLevel, GetDatabaseLockRange(db_->metadata_.id),
ScopesLockManager::LockType::kExclusive}};
db_->lock_manager_->AcquireLocks(
std::move(lock_requests),
base::BindOnce(&IndexedDBDatabase::DeleteRequest::DoDelete,
weak_factory_.GetWeakPtr()));
} }
void DoDelete(std::vector<ScopeLock> locks) { void DoDelete() {
Status s; Status s;
if (db_->backing_store_) if (db_->backing_store_)
s = db_->backing_store_->DeleteDatabase(db_->metadata_.name); s = db_->backing_store_->DeleteDatabase(db_->metadata_.name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment