| Index: dbus/exported_object.cc
|
| diff --git a/dbus/exported_object.cc b/dbus/exported_object.cc
|
| index e4a1641fa6e5ee67692bd383da896237e07a139c..d4113fa3bb3b4edcf0122712824cb84ebea5080e 100644
|
| --- a/dbus/exported_object.cc
|
| +++ b/dbus/exported_object.cc
|
| @@ -224,12 +224,12 @@ DBusHandlerResult ExportedObject::HandleMessage(
|
| method_call.release(),
|
| start_time));
|
| } else {
|
| - // If the D-Bus thread is not used, just call the method directly. We
|
| - // don't need the complicated logic to wait for the method call to be
|
| - // complete.
|
| - // |response| will be deleted in OnMethodCompleted().
|
| - Response* response = iter->second.Run(method_call.get());
|
| - OnMethodCompleted(method_call.release(), response, start_time);
|
| + // If the D-Bus thread is not used, just call the method directly.
|
| + iter->second.Run(method_call.get(),
|
| + base::Bind(&ExportedObject::SendResponse,
|
| + this,
|
| + start_time,
|
| + method_call.release()));
|
| }
|
|
|
| // It's valid to say HANDLED here, and send a method response at a later
|
| @@ -241,14 +241,27 @@ void ExportedObject::RunMethod(MethodCallCallback method_call_callback,
|
| MethodCall* method_call,
|
| base::TimeTicks start_time) {
|
| bus_->AssertOnOriginThread();
|
| + method_call_callback.Run(method_call,
|
| + base::Bind(&ExportedObject::SendResponse,
|
| + this,
|
| + start_time,
|
| + method_call));
|
| +}
|
|
|
| - Response* response = method_call_callback.Run(method_call);
|
| - bus_->PostTaskToDBusThread(FROM_HERE,
|
| - base::Bind(&ExportedObject::OnMethodCompleted,
|
| - this,
|
| - method_call,
|
| - response,
|
| - start_time));
|
| +void ExportedObject::SendResponse(base::TimeTicks start_time,
|
| + MethodCall* method_call,
|
| + Response* response) {
|
| + DCHECK(method_call);
|
| + if (bus_->HasDBusThread()) {
|
| + bus_->PostTaskToDBusThread(FROM_HERE,
|
| + base::Bind(&ExportedObject::OnMethodCompleted,
|
| + this,
|
| + method_call,
|
| + response,
|
| + start_time));
|
| + } else {
|
| + OnMethodCompleted(method_call, response, start_time);
|
| + }
|
| }
|
|
|
| void ExportedObject::OnMethodCompleted(MethodCall* method_call,
|
|
|