Eliminate a timed wait from ExportedObject::HandleMessage().
Previouslly, we blocked in D-Bus thread until the method call is handled
in the UI thread. Turned out this was a bad idea, and caused a crash when
the UI thread is hanging (crosbug.com/21341).
This patch will eliminate the timed wait and incoming methods will be handled
completely asynchronously.
BUG=chromium-os:21341
TEST=run dbus_unittests under valgrind
Review URL: http://codereview.chromium.org/8175009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104497 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/dbus/exported_object.h b/dbus/exported_object.h
index a6edb97a..24456f7a 100644
--- a/dbus/exported_object.h
+++ b/dbus/exported_object.h
@@ -123,7 +123,14 @@
// Runs the method. Helper function for HandleMessage().
void RunMethod(MethodCallCallback method_call_callback,
- MethodCall* method_call);
+ MethodCall* method_call,
+ base::TimeTicks start_time);
+
+ // Called on completion of the method run from RunMethod().
+ // Takes ownership of |method_call| and |response|.
+ void OnMethodCompleted(MethodCall* method_call,
+ Response* response,
+ base::TimeTicks start_time);
// Called when the object is unregistered.
void OnUnregistered(DBusConnection* connection);
@@ -141,8 +148,6 @@
std::string service_name_;
std::string object_path_;
bool object_is_registered_;
- dbus::Response* response_from_method_;
- base::WaitableEvent on_method_is_called_;
// The method table where keys are absolute method names (i.e. interface
// name + method name), and values are the corresponding callbacks.