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

Unified Diff: services/file/file_service.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: services/file/file_service.cc
diff --git a/services/file/file_service.cc b/services/file/file_service.cc
index d10ed4dcd750e368bc1b49fbf9705fb85a130bf5..119881cd19df094e10467b241408af09a7249f32 100644
--- a/services/file/file_service.cc
+++ b/services/file/file_service.cc
@@ -8,6 +8,7 @@
#include "base/memory/ptr_util.h"
#include "base/memory/weak_ptr.h"
#include "components/filesystem/lock_table.h"
+#include "components/leveldb/env_mojo.h"
#include "components/leveldb/leveldb_service_impl.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/file/file_system.h"
@@ -47,9 +48,7 @@ class FileService::LevelDBServiceObjects
: public base::SupportsWeakPtr<LevelDBServiceObjects> {
public:
// Created on the main thread.
- LevelDBServiceObjects(
- scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
- : file_task_runner_(std::move(file_task_runner)) {}
+ LevelDBServiceObjects(leveldb::MojoEnv* env) : env_(env) {}
// Destroyed on the |leveldb_service_runner_|.
~LevelDBServiceObjects() {}
@@ -58,47 +57,46 @@ class FileService::LevelDBServiceObjects
void OnLevelDBServiceRequest(const service_manager::Identity& remote_identity,
leveldb::mojom::LevelDBServiceRequest request) {
if (!leveldb_service_)
- leveldb_service_.reset(
- new leveldb::LevelDBServiceImpl(file_task_runner_));
+ leveldb_service_.reset(new leveldb::LevelDBServiceImpl(env_));
leveldb_bindings_.AddBinding(leveldb_service_.get(), std::move(request));
}
private:
- scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
-
// Variables that are only accessible on the |leveldb_service_runner_| thread.
std::unique_ptr<leveldb::mojom::LevelDBService> leveldb_service_;
mojo::BindingSet<leveldb::mojom::LevelDBService> leveldb_bindings_;
+ leveldb::MojoEnv* env_;
+
DISALLOW_COPY_AND_ASSIGN(LevelDBServiceObjects);
};
std::unique_ptr<service_manager::Service> CreateFileService(
- scoped_refptr<base::SingleThreadTaskRunner> file_service_runner,
+ leveldb::MojoEnv* leveldb_env,
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner) {
- return base::MakeUnique<FileService>(std::move(file_service_runner),
+ return base::MakeUnique<FileService>(leveldb_env,
std::move(leveldb_service_runner));
}
FileService::FileService(
- scoped_refptr<base::SingleThreadTaskRunner> file_service_runner,
+ leveldb::MojoEnv* leveldb_env,
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner)
- : file_service_runner_(std::move(file_service_runner)),
+ : leveldb_env_(leveldb_env),
leveldb_service_runner_(std::move(leveldb_service_runner)) {
registry_.AddInterface<leveldb::mojom::LevelDBService>(this);
registry_.AddInterface<mojom::FileSystem>(this);
}
FileService::~FileService() {
- file_service_runner_->DeleteSoon(FROM_HERE, file_system_objects_.release());
+ leveldb_env_->file_task_runner()->DeleteSoon(FROM_HERE,
+ file_system_objects_.release());
leveldb_service_runner_->DeleteSoon(FROM_HERE, leveldb_objects_.release());
}
void FileService::OnStart() {
file_system_objects_.reset(new FileService::FileSystemObjects(
GetUserDirForUserId(context()->identity().user_id())));
- leveldb_objects_.reset(
- new FileService::LevelDBServiceObjects(file_service_runner_));
+ leveldb_objects_.reset(new FileService::LevelDBServiceObjects(leveldb_env_));
}
void FileService::OnBindInterface(
@@ -111,7 +109,7 @@ void FileService::OnBindInterface(
void FileService::Create(const service_manager::Identity& remote_identity,
mojom::FileSystemRequest request) {
- file_service_runner_->PostTask(
+ leveldb_env_->file_task_runner()->PostTask(
FROM_HERE,
base::Bind(&FileService::FileSystemObjects::OnFileSystemRequest,
file_system_objects_->AsWeakPtr(), remote_identity,

Powered by Google App Engine
This is Rietveld 408576698