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

Unified Diff: device/hid/hid_service_linux.cc

Issue 2482463002: Remove DeviceMonitorLinux::WillDestroyCurrentMessageLoop(). (Closed)
Patch Set: CR achuithb #24 Created 4 years, 1 month 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
« no previous file with comments | « device/hid/hid_service_linux.h ('k') | device/hid/input_service_linux.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/hid/hid_service_linux.cc
diff --git a/device/hid/hid_service_linux.cc b/device/hid/hid_service_linux.cc
index c61ae4ed23023f6115f432363223de2bb375628d..1cd5d393b17030a5c6fdc05a7554016f27538276 100644
--- a/device/hid/hid_service_linux.cc
+++ b/device/hid/hid_service_linux.cc
@@ -18,6 +18,7 @@
#include "base/files/file_util.h"
#include "base/location.h"
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
#include "base/scoped_observer.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
@@ -70,26 +71,25 @@ class HidServiceLinux::FileThreadHelper : public DeviceMonitorLinux::Observer {
public:
FileThreadHelper(base::WeakPtr<HidServiceLinux> service,
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
- : observer_(this), service_(service), task_runner_(task_runner) {}
+ : observer_(this), service_(service), task_runner_(task_runner) {
+ thread_checker_.DetachFromThread();
+ }
~FileThreadHelper() override {
DCHECK(thread_checker_.CalledOnValidThread());
}
- static void Start(std::unique_ptr<FileThreadHelper> self) {
+ void Start() {
base::ThreadRestrictions::AssertIOAllowed();
- self->thread_checker_.DetachFromThread();
+ DCHECK(thread_checker_.CalledOnValidThread());
DeviceMonitorLinux* monitor = DeviceMonitorLinux::GetInstance();
- self->observer_.Add(monitor);
- monitor->Enumerate(base::Bind(&FileThreadHelper::OnDeviceAdded,
- base::Unretained(self.get())));
- self->task_runner_->PostTask(
+ observer_.Add(monitor);
+ monitor->Enumerate(
+ base::Bind(&FileThreadHelper::OnDeviceAdded, base::Unretained(this)));
+ task_runner_->PostTask(
FROM_HERE,
- base::Bind(&HidServiceLinux::FirstEnumerationComplete, self->service_));
-
- // |self| is now owned by the current message loop.
- ignore_result(self.release());
+ base::Bind(&HidServiceLinux::FirstEnumerationComplete, service_));
}
private:
@@ -187,11 +187,6 @@ class HidServiceLinux::FileThreadHelper : public DeviceMonitorLinux::Observer {
}
}
- void WillDestroyMonitorMessageLoop() override {
- DCHECK(thread_checker_.CalledOnValidThread());
- delete this;
- }
-
base::ThreadChecker thread_checker_;
ScopedObserver<DeviceMonitorLinux, DeviceMonitorLinux::Observer> observer_;
@@ -204,17 +199,24 @@ class HidServiceLinux::FileThreadHelper : public DeviceMonitorLinux::Observer {
HidServiceLinux::HidServiceLinux(
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
- : file_task_runner_(file_task_runner), weak_factory_(this) {
+ : file_task_runner_(std::move(file_task_runner)), weak_factory_(this) {
task_runner_ = base::ThreadTaskRunnerHandle::Get();
- std::unique_ptr<FileThreadHelper> helper(
- new FileThreadHelper(weak_factory_.GetWeakPtr(), task_runner_));
- helper_ = helper.get();
+ helper_ = base::MakeUnique<FileThreadHelper>(weak_factory_.GetWeakPtr(),
+ task_runner_);
file_task_runner_->PostTask(
- FROM_HERE, base::Bind(&FileThreadHelper::Start, base::Passed(&helper)));
+ FROM_HERE,
+ base::Bind(&FileThreadHelper::Start, base::Unretained(helper_.get())));
}
HidServiceLinux::~HidServiceLinux() {
- file_task_runner_->DeleteSoon(FROM_HERE, helper_);
+ DCHECK(!helper_);
+}
+
+void HidServiceLinux::Shutdown() {
+ const bool did_post_task =
+ file_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
+ DCHECK(did_post_task);
+ HidService::Shutdown();
}
void HidServiceLinux::Connect(const HidDeviceId& device_id,
« no previous file with comments | « device/hid/hid_service_linux.h ('k') | device/hid/input_service_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698