# HG changeset patch # User Michael Albinus <michael.albinus@gmx.de> # Date 1250444087 0 # Node ID 52ea0b8b565eee565a43e9edaa97bd901d473554 # Parent 35fbb27750a7f2e4b1a994a96836a7cd6af01641 * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER. diff -r 35fbb27750a7 -r 52ea0b8b565e src/dbusbind.c --- a/src/dbusbind.c Sun Aug 16 15:48:15 2009 +0000 +++ b/src/dbusbind.c Sun Aug 16 17:34:47 2009 +0000 @@ -967,7 +967,8 @@ offered by SERVICE. It must provide METHOD. HANDLER is a Lisp function, which is called when the corresponding -return message has arrived. +return message has arrived. If HANDLER is nil, no return message will +be expected. If the parameter `:timeout' is given, the following integer TIMEOUT specifies the maximun number of milliseconds the method call must @@ -987,7 +988,7 @@ All arguments can be preceded by a type symbol. For details about type symbols, see Info node `(dbus)Type Conversion'. -The function returns a key into the hash table +Unless HANDLER is nil, the function returns a key into the hash table `dbus-registered-functions-table'. The corresponding entry in the hash table is removed, when the return message has been arrived, and HANDLER is called. @@ -1032,7 +1033,7 @@ CHECK_STRING (path); CHECK_STRING (interface); CHECK_STRING (method); - if (!FUNCTIONP (handler)) + if (!NILP (handler) && !FUNCTIONP (handler)) wrong_type_argument (intern ("functionp"), handler); GCPRO6 (bus, service, path, interface, method, handler); @@ -1091,19 +1092,35 @@ xd_append_arg (dtype, args[i], &iter); } - /* Send the message. The message is just added to the outgoing - message queue. */ - if (!dbus_connection_send_with_reply (connection, dmessage, NULL, timeout)) - XD_SIGNAL1 (build_string ("Cannot send message")); + if (!NILP (handler)) + { + /* Send the message. The message is just added to the outgoing + message queue. */ + if (!dbus_connection_send_with_reply (connection, dmessage, + NULL, timeout)) + XD_SIGNAL1 (build_string ("Cannot send message")); + + /* The result is the key in Vdbus_registered_functions_table. */ + result = (list2 (bus, make_number (dbus_message_get_serial (dmessage)))); + + /* Create a hash table entry. */ + Fputhash (result, handler, Vdbus_registered_functions_table); + } + else + { + /* Send the message. The message is just added to the outgoing + message queue. */ + if (!dbus_connection_send (connection, dmessage, NULL)) + XD_SIGNAL1 (build_string ("Cannot send message")); + + result = Qnil; + } + + /* Flush connection to ensure the message is handled. */ + dbus_connection_flush (connection); XD_DEBUG_MESSAGE ("Message sent"); - /* The result is the key in Vdbus_registered_functions_table. */ - result = (list2 (bus, make_number (dbus_message_get_serial (dmessage)))); - - /* Create a hash table entry. */ - Fputhash (result, handler, Vdbus_registered_functions_table); - /* Cleanup. */ dbus_message_unref (dmessage);