From e184ccec44f19ae4f3beaef01d5e90753ff924e8 Mon Sep 17 00:00:00 2001 From: "satorux@chromium.org" Date: Fri, 7 Oct 2011 16:26:30 +0000 Subject: 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 --- dbus/exported_object.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'dbus/exported_object.h') diff --git a/dbus/exported_object.h b/dbus/exported_object.h index a6edb97..24456f7 100644 --- a/dbus/exported_object.h +++ b/dbus/exported_object.h @@ -123,7 +123,14 @@ class ExportedObject : public base::RefCountedThreadSafe { // 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 @@ class ExportedObject : public base::RefCountedThreadSafe { 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. -- cgit v1.1