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

Unified Diff: components/leveldb/leveldb_service_impl.cc

Issue 2722293002: Fix lifetime of leveldb::MojoEnv instances. (Closed)
Patch Set: annotate leaks Created 3 years, 8 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..cd405bd70cf0dd4f3844548cf578389d390b2725 100644
--- a/components/leveldb/leveldb_service_impl.cc
+++ b/components/leveldb/leveldb_service_impl.cc
@@ -20,17 +20,10 @@
namespace leveldb {
-LevelDBServiceImpl::LevelDBServiceImpl(
- scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
- : thread_(new LevelDBMojoProxy(std::move(file_task_runner))),
- environment_name_("LevelDBEnv") {}
+LevelDBServiceImpl::LevelDBServiceImpl(MojoEnv* env) : env_(env) {}
LevelDBServiceImpl::~LevelDBServiceImpl() {}
-void LevelDBServiceImpl::SetEnvironmentName(const std::string& name) {
- environment_name_ = name;
-}
-
void LevelDBServiceImpl::Open(
filesystem::mojom::DirectoryPtr directory,
const std::string& dbname,
@@ -56,22 +49,17 @@ 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::unique_ptr<MojoEnv::Directory> dir =
+ 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, dir->prefix() + dbname, &db);
if (s.ok()) {
- mojo::MakeStrongAssociatedBinding(
- base::MakeUnique<LevelDBDatabaseImpl>(std::move(env_mojo),
- base::WrapUnique(db)),
- std::move(database));
+ mojo::MakeStrongAssociatedBinding(base::MakeUnique<LevelDBDatabaseImpl>(
+ std::move(dir), base::WrapUnique(db)),
+ std::move(database));
}
callback.Run(LeveldbStatusToError(s));
@@ -104,13 +92,11 @@ 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::unique_ptr<MojoEnv::Directory> dir =
+ env_->RegisterDirectory(std::move(directory));
+ options.env = env_;
+ callback.Run(LeveldbStatusToError(
+ leveldb::DestroyDB(dir->prefix() + dbname, options)));
}
} // namespace leveldb

Powered by Google App Engine
This is Rietveld 408576698