Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Unified Diff: components/leveldb/leveldb_service_impl.cc

Issue 2722293002: Fix lifetime of leveldb::MojoEnv instances. (Closed)
Patch Set: minor cleanups Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/leveldb/leveldb_service_impl.cc
diff --git a/components/leveldb/leveldb_service_impl.cc b/components/leveldb/leveldb_service_impl.cc
index e3fd368af1777e58c2940ed07b90d3e322ff5090..c23f91ae2b38eb60f730c118f6c3bcbbff33b9d8 100644
--- a/components/leveldb/leveldb_service_impl.cc
+++ b/components/leveldb/leveldb_service_impl.cc
@@ -22,15 +22,10 @@ namespace leveldb {
LevelDBServiceImpl::LevelDBServiceImpl(
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
- : thread_(new LevelDBMojoProxy(std::move(file_task_runner))),
- environment_name_("LevelDBEnv") {}
+ : env_(MojoEnv::Get(std::move(file_task_runner))) {}
LevelDBServiceImpl::~LevelDBServiceImpl() {}
michaeln 2017/03/27 20:24:11 should UnregisterDirectory happen in this class?
Marijn Kruisselbrink 2017/03/31 23:26:24 All the open directories should be owned by some L
-void LevelDBServiceImpl::SetEnvironmentName(const std::string& name) {
- environment_name_ = name;
-}
-
void LevelDBServiceImpl::Open(
filesystem::mojom::DirectoryPtr directory,
const std::string& dbname,
@@ -56,20 +51,15 @@ void LevelDBServiceImpl::OpenWithOptions(
options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue;
options.compression = leveldb::kSnappyCompression;
- // Register our directory with the file thread.
- LevelDBMojoProxy::OpaqueDir* dir =
- thread_->RegisterDirectory(std::move(directory));
-
- std::unique_ptr<MojoEnv> env_mojo(
- new MojoEnv(environment_name_, thread_, dir));
- options.env = env_mojo.get();
+ std::string prefix = env_->RegisterDirectory(std::move(directory));
+ options.env = env_;
leveldb::DB* db = nullptr;
- leveldb::Status s = leveldb::DB::Open(options, dbname, &db);
+ leveldb::Status s = leveldb::DB::Open(options, prefix + dbname, &db);
if (s.ok()) {
mojo::MakeStrongAssociatedBinding(
- base::MakeUnique<LevelDBDatabaseImpl>(std::move(env_mojo),
+ base::MakeUnique<LevelDBDatabaseImpl>(env_, std::move(prefix),
base::WrapUnique(db)),
std::move(database));
}
@@ -104,13 +94,10 @@ void LevelDBServiceImpl::Destroy(filesystem::mojom::DirectoryPtr directory,
const std::string& dbname,
const DestroyCallback& callback) {
leveldb::Options options;
- // Register our directory with the file thread.
- LevelDBMojoProxy::OpaqueDir* dir =
- thread_->RegisterDirectory(std::move(directory));
- std::unique_ptr<MojoEnv> env_mojo(
- new MojoEnv(environment_name_, thread_, dir));
- options.env = env_mojo.get();
- callback.Run(LeveldbStatusToError(leveldb::DestroyDB(dbname, options)));
+ std::string prefix = env_->RegisterDirectory(std::move(directory));
michaeln 2017/03/27 20:24:10 Does this leak a directory registration? Wdyt abou
Marijn Kruisselbrink 2017/03/31 23:26:24 Yeah, definitely agree that it would be nice to no
+ options.env = env_;
+ callback.Run(
+ LeveldbStatusToError(leveldb::DestroyDB(prefix + dbname, options)));
}
} // namespace leveldb

Powered by Google App Engine
This is Rietveld 408576698