summaryrefslogtreecommitdiff
path: root/chromium/components/sqlite_proto
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/sqlite_proto
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/sqlite_proto')
-rw-r--r--chromium/components/sqlite_proto/key_value_data.h20
-rw-r--r--chromium/components/sqlite_proto/key_value_table.h9
2 files changed, 17 insertions, 12 deletions
diff --git a/chromium/components/sqlite_proto/key_value_data.h b/chromium/components/sqlite_proto/key_value_data.h
index 126eedaba8c..fcd50e23409 100644
--- a/chromium/components/sqlite_proto/key_value_data.h
+++ b/chromium/components/sqlite_proto/key_value_data.h
@@ -131,9 +131,10 @@ template <typename T, typename Compare>
void KeyValueData<T, Compare>::InitializeOnDBSequence() {
DCHECK(manager_->GetTaskRunner()->RunsTasksInCurrentSequence());
auto data_map = std::make_unique<std::map<std::string, T>>();
+
manager_->ExecuteDBTaskOnDBSequence(
- base::BindOnce(&KeyValueTable<T>::GetAllData,
- base::Unretained(backend_table_), data_map.get()));
+ base::BindOnce(&KeyValueTable<T>::GetAllData, backend_table_->AsWeakPtr(),
+ data_map.get()));
// To ensure invariant that data_cache_.size() <= max_num_entries_.
std::vector<std::string> keys_to_delete;
@@ -145,7 +146,7 @@ void KeyValueData<T, Compare>::InitializeOnDBSequence() {
}
if (!keys_to_delete.empty()) {
manager_->ExecuteDBTaskOnDBSequence(base::BindOnce(
- &KeyValueTable<T>::DeleteData, base::Unretained(backend_table_),
+ &KeyValueTable<T>::DeleteData, backend_table_->AsWeakPtr(),
std::vector<std::string>(keys_to_delete)));
}
@@ -219,7 +220,7 @@ void KeyValueData<T, Compare>::DeleteAllData() {
// by user.
manager_->ScheduleDBTask(FROM_HERE,
base::BindOnce(&KeyValueTable<T>::DeleteAllData,
- base::Unretained(backend_table_)));
+ backend_table_->AsWeakPtr()));
}
template <typename T, typename Compare>
@@ -236,9 +237,9 @@ void KeyValueData<T, Compare>::FlushDataToDisk() {
auto it = data_cache_->find(key);
if (it != data_cache_->end()) {
manager_->ScheduleDBTask(
- FROM_HERE, base::BindOnce(&KeyValueTable<T>::UpdateData,
- base::Unretained(backend_table_), key,
- it->second));
+ FROM_HERE,
+ base::BindOnce(&KeyValueTable<T>::UpdateData,
+ backend_table_->AsWeakPtr(), key, it->second));
}
break;
}
@@ -249,9 +250,8 @@ void KeyValueData<T, Compare>::FlushDataToDisk() {
if (!keys_to_delete.empty()) {
manager_->ScheduleDBTask(
- FROM_HERE,
- base::BindOnce(&KeyValueTable<T>::DeleteData,
- base::Unretained(backend_table_), keys_to_delete));
+ FROM_HERE, base::BindOnce(&KeyValueTable<T>::DeleteData,
+ backend_table_->AsWeakPtr(), keys_to_delete));
}
deferred_updates_.clear();
diff --git a/chromium/components/sqlite_proto/key_value_table.h b/chromium/components/sqlite_proto/key_value_table.h
index 0f63ce0442d..946386e6876 100644
--- a/chromium/components/sqlite_proto/key_value_table.h
+++ b/chromium/components/sqlite_proto/key_value_table.h
@@ -45,9 +45,14 @@ std::string GetDeleteAllSql(const std::string& table_name);
// manager_->ScheduleDBTask(
// FROM_HERE,
// base::BindOnce(&KeyValueTable<PrefetchData>::UpdateData,
-// base::Unretained(table_), key, data));
+// table_->AsWeakPtr(), key, data));
+//
+// TODO(crbug.com/1115398): Supporting weak pointers is a temporary measure
+// mitigating a crash caused by complex lifetime requirements for KeyValueTable
+// relative to the related classes. Making KeyValueTable<T> stateless instead
+// could be a better way to resolve these lifetime issues in the long run.
template <typename T>
-class KeyValueTable {
+class KeyValueTable : public base::SupportsWeakPtr<KeyValueTable<T>> {
public:
explicit KeyValueTable(const std::string& table_name);
// Virtual for testing.