summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chromeos/dbus/blocking_method_caller.cc25
1 files changed, 9 insertions, 16 deletions
diff --git a/chromeos/dbus/blocking_method_caller.cc b/chromeos/dbus/blocking_method_caller.cc
index 4485c52..91c796c 100644
--- a/chromeos/dbus/blocking_method_caller.cc
+++ b/chromeos/dbus/blocking_method_caller.cc
@@ -13,23 +13,10 @@ namespace chromeos {
namespace {
-// A utility class to ensure the WaitableEvent is signaled.
-class WaitableEventSignaler {
- public:
- explicit WaitableEventSignaler(base::WaitableEvent* event) : event_(event) {}
-
- ~WaitableEventSignaler() {
- event_->Signal();
- }
-
- private:
- base::WaitableEvent* event_;
-};
-
// This function is a part of CallMethodAndBlock implementation.
void CallMethodAndBlockInternal(
dbus::Response** response,
- WaitableEventSignaler* signaler,
+ base::ScopedClosureRunner* signaler,
dbus::ObjectProxy* proxy,
dbus::MethodCall* method_call) {
*response = proxy->CallMethodAndBlock(
@@ -51,8 +38,14 @@ BlockingMethodCaller::~BlockingMethodCaller() {
dbus::Response* BlockingMethodCaller::CallMethodAndBlock(
dbus::MethodCall* method_call) {
- WaitableEventSignaler* signaler =
- new WaitableEventSignaler(&on_blocking_method_call_);
+ // on_blocking_method_call_->Signal() will be called when |signaler| is
+ // destroyed.
+ base::Closure signal_task(
+ base::Bind(&base::WaitableEvent::Signal,
+ base::Unretained(&on_blocking_method_call_)));
+ base::ScopedClosureRunner* signaler =
+ new base::ScopedClosureRunner(signal_task);
+
dbus::Response* response = NULL;
bus_->PostTaskToDBusThread(
FROM_HERE,