linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ 00/10 v3] Fix message order
@ 2013-09-03 11:21 Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 01/10 v3] build: Fix not rebuilding bluetoothd if gdbus changes Luiz Augusto von Dentz
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

s set fixes a couple of issues introduced with the use of ObjectManager due
the processing of signals on idle to group changes, this has been causing
issues with external components such as ofono and pulseaudio that sometimes
receives connections from devices objects that have pending signals thus
cannot be properly processed or have to be assumed paired and with certain
UUIDs which is not ideal.

v2: Fixes some commit messages as suggested by Lucas Demarchi, in addition to
that rework flush mechanism to honor the order of the pending signals and make
it work with any connection.

v3: Add comments regarding the use of dbus_connection_send to prevent recursive
calls to g_dbus_flush.

Luiz Augusto von Dentz (10):
  build: Fix not rebuilding bluetoothd if gdbus changes
  unit: Add gdbus/client_check_order
  gdbus: Fix sending ObjectManager/Properties signals out of order
  gdbus: Add g_dbus_send_message_with_reply
  gdbus: Avoid calling dbus_connection_send*
  gdbus: Fix emitting PropertiesChanged twice
  core: Make use of g_dbus_send_message_with_reply
  neard: Make use of g_dbus_send_message_with_reply
  audio/media: Make use of g_dbus_send_message_with_reply
  obexd: Make use of g_dbus_send_message*

 Makefile.am                   |   2 +-
 gdbus/client.c                |  14 ++--
 gdbus/gdbus.h                 |   3 +
 gdbus/object.c                | 176 ++++++++++++++++++++++++------------------
 obexd/plugins/bluetooth.c     |   2 +-
 obexd/plugins/pcsuite.c       |   5 +-
 obexd/plugins/syncevolution.c |   6 +-
 obexd/src/manager.c           |   3 +-
 plugins/neard.c               |   2 +-
 profiles/audio/media.c        |   2 +-
 src/agent.c                   |  12 +--
 src/profile.c                 |   4 +-
 unit/test-gdbus-client.c      |  71 +++++++++++++++++
 13 files changed, 200 insertions(+), 102 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 01/10 v3] build: Fix not rebuilding bluetoothd if gdbus changes
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 02/10 v3] unit: Add gdbus/client_check_order Luiz Augusto von Dentz
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

src_bluetoothd_DEPENDENCIES should list all local libraries including gdbus
otherwise it does not get relinked whenever gdbus changes.
---
 Makefile.am | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index 61daec4..4e4b1c5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -157,7 +157,7 @@ src_bluetoothd_LDFLAGS = $(AM_LDFLAGS) -Wl,--export-dynamic \
 				-Wl,--version-script=$(srcdir)/src/bluetooth.ver
 
 src_bluetoothd_DEPENDENCIES = lib/libbluetooth-internal.la \
-						src/bluetooth.service
+				gdbus/libgdbus-internal.la src/bluetooth.service
 
 src_bluetoothd_CFLAGS = $(AM_CFLAGS) -DBLUETOOTH_PLUGIN_BUILTIN \
 					-DPLUGINDIR=\""$(build_plugindir)"\"
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 02/10 v3] unit: Add gdbus/client_check_order
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 01/10 v3] build: Fix not rebuilding bluetoothd if gdbus changes Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 03/10 v3] gdbus: Fix sending ObjectManager/Properties signals out of order Luiz Augusto von Dentz
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

---
 unit/test-gdbus-client.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git a/unit/test-gdbus-client.c b/unit/test-gdbus-client.c
index a594384..488d4ec 100644
--- a/unit/test-gdbus-client.c
+++ b/unit/test-gdbus-client.c
@@ -35,6 +35,7 @@ struct context {
 	GMainLoop *main_loop;
 	DBusConnection *dbus_conn;
 	GDBusClient *dbus_client;
+	GDBusProxy *proxy;
 	void *data;
 	guint timeout_source;
 };
@@ -779,6 +780,74 @@ static void client_string_changed(void)
 	destroy_context(context);
 }
 
+static void property_check_order(const DBusError *err, void *user_data)
+{
+	struct context *context = user_data;
+	GDBusProxy *proxy = context->proxy;
+	DBusMessageIter iter;
+	const char *string;
+
+	g_assert(!dbus_error_is_set(err));
+
+	g_assert(g_dbus_proxy_get_property(proxy, "String", &iter));
+
+	dbus_message_iter_get_basic(&iter, &string);
+	g_assert(g_strcmp0(string, "value1") == 0);
+
+	g_dbus_client_unref(context->dbus_client);
+}
+
+static void proxy_check_order(GDBusProxy *proxy, void *user_data)
+{
+	struct context *context = user_data;
+	const char *string;
+
+	if (g_test_verbose())
+		g_print("proxy %s found\n",
+					g_dbus_proxy_get_interface(proxy));
+
+	context->proxy = proxy;
+	string = "value1";
+	g_assert(g_dbus_proxy_set_property_basic(proxy, "String",
+					DBUS_TYPE_STRING, &string,
+					property_check_order, context,
+					NULL));
+}
+
+static void client_check_order(void)
+{
+	struct context *context = create_context();
+	static const GDBusPropertyTable string_properties[] = {
+		{ "String", "s", get_string, set_string, string_exists },
+		{ },
+	};
+
+	if (context == NULL)
+		return;
+
+	context->data = g_strdup("value");
+	g_dbus_register_interface(context->dbus_conn,
+				SERVICE_PATH, SERVICE_NAME,
+				methods, signals, string_properties,
+				context, NULL);
+
+	context->dbus_client = g_dbus_client_new(context->dbus_conn,
+						SERVICE_NAME, SERVICE_PATH);
+
+	g_dbus_client_set_disconnect_watch(context->dbus_client,
+						disconnect_handler, context);
+	g_dbus_client_set_proxy_handlers(context->dbus_client,
+						proxy_check_order, NULL, NULL,
+						context);
+
+	g_main_loop_run(context->main_loop);
+
+	g_dbus_unregister_interface(context->dbus_conn,
+					SERVICE_PATH, SERVICE_NAME);
+
+	destroy_context(context);
+}
+
 int main(int argc, char *argv[])
 {
 	g_test_init(&argc, &argv, NULL);
@@ -809,5 +878,7 @@ int main(int argc, char *argv[])
 	g_test_add_func("/gdbus/client_string_changed",
 						client_string_changed);
 
+	g_test_add_func("/gdbus/client_check_order", client_check_order);
+
 	return g_test_run();
 }
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 03/10 v3] gdbus: Fix sending ObjectManager/Properties signals out of order
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 01/10 v3] build: Fix not rebuilding bluetoothd if gdbus changes Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 02/10 v3] unit: Add gdbus/client_check_order Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 04/10 v3] gdbus: Add g_dbus_send_message_with_reply Luiz Augusto von Dentz
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

In some cases the order of the messages is altered when a message is
sent without processing the pending signals first, currently this affect
client_check_order unit test:

/gdbus/client_check_order: **
ERROR:unit/test-gdbus-client.c:795:property_check_order: assertion failed: (g_strcmp0(string, "value1") == 0)

As can be observed the value of the property is not yet updated because the
signal it is still pending, once this fix is applied the test pass:

/gdbus/client_check_order: OK

Note that the flushing only works when g_dbus_send_message is used so
places where dbus_connection_send and other variants are called directly
may still change the order.
---
 gdbus/object.c | 69 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 53 insertions(+), 16 deletions(-)

diff --git a/gdbus/object.c b/gdbus/object.c
index 2f8ef45..83fc4e6 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -86,6 +86,7 @@ struct property_data {
 
 static int global_flags = 0;
 static struct generic_data *root;
+static GSList *pending = NULL;
 
 static gboolean process_changes(gpointer user_data);
 static void process_properties_from_interface(struct generic_data *data,
@@ -599,7 +600,9 @@ static void emit_interfaces_added(struct generic_data *data)
 
 	dbus_message_iter_close_container(&iter, &array);
 
-	g_dbus_send_message(data->conn, signal);
+	/* Use dbus_connection_send to avoid recursive calls to g_dbus_flush */
+	dbus_connection_send(data->conn, signal, NULL);
+	dbus_message_unref(signal);
 }
 
 static struct interface_data *find_interface(GSList *interfaces,
@@ -640,6 +643,16 @@ static gboolean g_dbus_args_have_signature(const GDBusArgInfo *args,
 	return TRUE;
 }
 
+static void add_pending(struct generic_data *data)
+{
+	if (data->process_id > 0)
+		return;
+
+	data->process_id = g_idle_add(process_changes, data);
+
+	pending = g_slist_append(pending, data);
+}
+
 static gboolean remove_interface(struct generic_data *data, const char *name)
 {
 	struct interface_data *iface;
@@ -677,10 +690,7 @@ static gboolean remove_interface(struct generic_data *data, const char *name)
 	data->removed = g_slist_prepend(data->removed, iface->name);
 	g_free(iface);
 
-	if (data->process_id > 0)
-		return TRUE;
-
-	data->process_id = g_idle_add(process_changes, data);
+	add_pending(data);
 
 	return TRUE;
 }
@@ -976,14 +986,26 @@ static void emit_interfaces_removed(struct generic_data *data)
 
 	dbus_message_iter_close_container(&iter, &array);
 
-	g_dbus_send_message(data->conn, signal);
+	/* Use dbus_connection_send to avoid recursive calls to g_dbus_flush */
+	dbus_connection_send(data->conn, signal, NULL);
+	dbus_message_unref(signal);
+}
+
+static void remove_pending(struct generic_data *data)
+{
+	if (data->process_id > 0) {
+		g_source_remove(data->process_id);
+		data->process_id = 0;
+	}
+
+	pending = g_slist_remove(pending, data);
 }
 
 static gboolean process_changes(gpointer user_data)
 {
 	struct generic_data *data = user_data;
 
-	data->process_id = 0;
+	remove_pending(data);
 
 	if (data->added != NULL)
 		emit_interfaces_added(data);
@@ -1211,10 +1233,8 @@ done:
 		return TRUE;
 
 	data->added = g_slist_append(data->added, iface);
-	if (data->process_id > 0)
-		return TRUE;
 
-	data->process_id = g_idle_add(process_changes, data);
+	add_pending(data);
 
 	return TRUE;
 }
@@ -1494,6 +1514,21 @@ DBusMessage *g_dbus_create_reply(DBusMessage *message, int type, ...)
 	return reply;
 }
 
+static void g_dbus_flush(DBusConnection *connection)
+{
+	GSList *l;
+
+	for (l = pending; l;) {
+		struct generic_data *data = l->data;
+
+		l = l->next;
+		if (data->conn != connection)
+			continue;
+
+		process_changes(data);
+	}
+}
+
 gboolean g_dbus_send_message(DBusConnection *connection, DBusMessage *message)
 {
 	dbus_bool_t result = FALSE;
@@ -1510,6 +1545,9 @@ gboolean g_dbus_send_message(DBusConnection *connection, DBusMessage *message)
 			goto out;
 	}
 
+	/* Flush pending signal to guarantee message order */
+	g_dbus_flush(connection);
+
 	result = dbus_connection_send(connection, message, NULL);
 
 out:
@@ -1664,10 +1702,12 @@ static void process_properties_from_interface(struct generic_data *data,
 	g_slist_free(invalidated);
 	dbus_message_iter_close_container(&iter, &array);
 
-	g_dbus_send_message(data->conn, signal);
-
 	g_slist_free(iface->pending_prop);
 	iface->pending_prop = NULL;
+
+	/* Use dbus_connection_send to avoid recursive calls to g_dbus_flush */
+	dbus_connection_send(data->conn, signal, NULL);
+	dbus_message_unref(signal);
 }
 
 static void process_property_changes(struct generic_data *data)
@@ -1723,10 +1763,7 @@ void g_dbus_emit_property_changed(DBusConnection *connection,
 	iface->pending_prop = g_slist_prepend(iface->pending_prop,
 						(void *) property);
 
-	if (!data->process_id) {
-		data->process_id = g_idle_add(process_changes, data);
-		return;
-	}
+	add_pending(data);
 }
 
 gboolean g_dbus_get_properties(DBusConnection *connection, const char *path,
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 04/10 v3] gdbus: Add g_dbus_send_message_with_reply
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (2 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 03/10 v3] gdbus: Fix sending ObjectManager/Properties signals out of order Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 05/10 v3] gdbus: Avoid calling dbus_connection_send* Luiz Augusto von Dentz
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

g_dbus_send_message_with_reply flushes pending signals before calling
dbus_connection_send_with_reply so it does not alter the message order
---
 gdbus/gdbus.h  |  3 +++
 gdbus/object.c | 11 +++++++++++
 2 files changed, 14 insertions(+)

diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
index 8b13393..9542109 100644
--- a/gdbus/gdbus.h
+++ b/gdbus/gdbus.h
@@ -250,6 +250,9 @@ DBusMessage *g_dbus_create_reply_valist(DBusMessage *message,
 						int type, va_list args);
 
 gboolean g_dbus_send_message(DBusConnection *connection, DBusMessage *message);
+gboolean g_dbus_send_message_with_reply(DBusConnection *connection,
+					DBusMessage *message,
+					DBusPendingCall **call, int timeout);
 gboolean g_dbus_send_error(DBusConnection *connection, DBusMessage *message,
 				const char *name, const char *format, ...)
 					 __attribute__((format(printf, 4, 5)));
diff --git a/gdbus/object.c b/gdbus/object.c
index 83fc4e6..773128c 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -1556,6 +1556,17 @@ out:
 	return result;
 }
 
+gboolean g_dbus_send_message_with_reply(DBusConnection *connection,
+					DBusMessage *message,
+					DBusPendingCall **call, int timeout)
+{
+	/* Flush pending signal to guarantee message order */
+	g_dbus_flush(connection);
+
+	return dbus_connection_send_with_reply(connection, message, call,
+								timeout);
+}
+
 gboolean g_dbus_send_error_valist(DBusConnection *connection,
 					DBusMessage *message, const char *name,
 					const char *format, va_list args)
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 05/10 v3] gdbus: Avoid calling dbus_connection_send*
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (3 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 04/10 v3] gdbus: Add g_dbus_send_message_with_reply Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 06/10 v3] gdbus: Fix emitting PropertiesChanged twice Luiz Augusto von Dentz
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

dbus_connection_send* should not be called directly except by
g_dbus_send_message.
---
 gdbus/client.c | 14 ++++-----
 gdbus/object.c | 92 ++++++++++++++++++++++------------------------------------
 2 files changed, 42 insertions(+), 64 deletions(-)

diff --git a/gdbus/client.c b/gdbus/client.c
index d80e252..8ebfaad 100644
--- a/gdbus/client.c
+++ b/gdbus/client.c
@@ -100,7 +100,7 @@ static gboolean modify_match(DBusConnection *conn, const char *member,
 	dbus_message_append_args(msg, DBUS_TYPE_STRING, &rule,
 						DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(conn, msg, &call, -1) == FALSE) {
+	if (g_dbus_send_message_with_reply(conn, msg, &call, -1) == FALSE) {
 		dbus_message_unref(msg);
 		return FALSE;
 	}
@@ -319,7 +319,7 @@ static void get_all_properties(GDBusProxy *proxy)
 	dbus_message_append_args(msg, DBUS_TYPE_STRING, &proxy->interface,
 							DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(client->dbus_conn, msg,
+	if (g_dbus_send_message_with_reply(client->dbus_conn, msg,
 							&call, -1) == FALSE) {
 		dbus_message_unref(msg);
 		return;
@@ -575,7 +575,7 @@ gboolean g_dbus_proxy_refresh_property(GDBusProxy *proxy, const char *name)
 							&proxy->interface);
 	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
 
-	if (dbus_connection_send_with_reply(client->dbus_conn, msg,
+	if (g_dbus_send_message_with_reply(client->dbus_conn, msg,
 							&call, -1) == FALSE) {
 		dbus_message_unref(msg);
 		refresh_property_free(data);
@@ -668,7 +668,7 @@ gboolean g_dbus_proxy_set_property_basic(GDBusProxy *proxy,
 	dbus_message_iter_append_basic(&variant, type, value);
 	dbus_message_iter_close_container(&iter, &variant);
 
-	if (dbus_connection_send_with_reply(client->dbus_conn, msg,
+	if (g_dbus_send_message_with_reply(client->dbus_conn, msg,
 							&call, -1) == FALSE) {
 		dbus_message_unref(msg);
 		g_free(data);
@@ -742,7 +742,7 @@ gboolean g_dbus_proxy_method_call(GDBusProxy *proxy, const char *method,
 		setup(&iter, data->user_data);
 	}
 
-	if (dbus_connection_send_with_reply(client->dbus_conn, msg,
+	if (g_dbus_send_message_with_reply(client->dbus_conn, msg,
 					&call, METHOD_CALL_TIMEOUT) == FALSE) {
 		dbus_message_unref(msg);
 		g_free(data);
@@ -1038,7 +1038,7 @@ static void get_managed_objects(GDBusClient *client)
 
 	dbus_message_append_args(msg, DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(client->dbus_conn, msg,
+	if (g_dbus_send_message_with_reply(client->dbus_conn, msg,
 				&client->get_objects_call, -1) == FALSE) {
 		dbus_message_unref(msg);
 		return;
@@ -1102,7 +1102,7 @@ static void get_name_owner(GDBusClient *client, const char *name)
 	dbus_message_append_args(msg, DBUS_TYPE_STRING, &name,
 						DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(client->dbus_conn, msg,
+	if (g_dbus_send_message_with_reply(client->dbus_conn, msg,
 					&client->pending_call, -1) == FALSE) {
 		dbus_message_unref(msg);
 		return;
diff --git a/gdbus/object.c b/gdbus/object.c
index 773128c..c4cf724 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -272,8 +272,7 @@ static DBusHandlerResult process_message(DBusConnection *connection,
 	if (reply == NULL)
 		return DBUS_HANDLER_RESULT_NEED_MEMORY;
 
-	dbus_connection_send(connection, reply, NULL);
-	dbus_message_unref(reply);
+	g_dbus_send_message(connection, reply);
 
 	return DBUS_HANDLER_RESULT_HANDLED;
 }
@@ -313,19 +312,14 @@ void g_dbus_pending_error_valist(DBusConnection *connection,
 
 	for (list = pending_security; list; list = list->next) {
 		struct security_data *secdata = list->data;
-		DBusMessage *reply;
 
 		if (secdata->pending != pending)
 			continue;
 
 		pending_security = g_slist_remove(pending_security, secdata);
 
-		reply = g_dbus_create_error_valist(secdata->message,
+		g_dbus_send_error_valist(connection, secdata->message,
 							name, format, args);
-		if (reply != NULL) {
-			dbus_connection_send(connection, reply, NULL);
-			dbus_message_unref(reply);
-		}
 
 		dbus_message_unref(secdata->message);
 		g_free(secdata);
@@ -470,18 +464,13 @@ void g_dbus_pending_property_error_valist(GDBusPendingReply id,
 					va_list args)
 {
 	struct property_data *propdata;
-	DBusMessage *reply;
 
 	propdata = remove_pending_property_data(id);
 	if (propdata == NULL)
 		return;
 
-	reply = g_dbus_create_error_valist(propdata->message, name, format,
-									args);
-	if (reply != NULL) {
-		dbus_connection_send(propdata->conn, reply, NULL);
-		dbus_message_unref(reply);
-	}
+	g_dbus_send_error_valist(propdata->conn, propdata->message, name,
+								format, args);
 
 	dbus_message_unref(propdata->message);
 	g_free(propdata);
@@ -1339,45 +1328,6 @@ static gboolean check_signal(DBusConnection *conn, const char *path,
 	return FALSE;
 }
 
-static dbus_bool_t emit_signal_valist(DBusConnection *conn,
-						const char *path,
-						const char *interface,
-						const char *name,
-						int first,
-						va_list var_args)
-{
-	DBusMessage *signal;
-	dbus_bool_t ret;
-	const GDBusArgInfo *args;
-
-	if (!check_signal(conn, path, interface, name, &args))
-		return FALSE;
-
-	signal = dbus_message_new_signal(path, interface, name);
-	if (signal == NULL) {
-		error("Unable to allocate new %s.%s signal", interface,  name);
-		return FALSE;
-	}
-
-	ret = dbus_message_append_args_valist(signal, first, var_args);
-	if (!ret)
-		goto fail;
-
-	if (g_dbus_args_have_signature(args, signal) == FALSE) {
-		error("%s.%s: got unexpected signature '%s'", interface, name,
-					dbus_message_get_signature(signal));
-		ret = FALSE;
-		goto fail;
-	}
-
-	ret = dbus_connection_send(conn, signal, NULL);
-
-fail:
-	dbus_message_unref(signal);
-
-	return ret;
-}
-
 gboolean g_dbus_register_interface(DBusConnection *connection,
 					const char *path, const char *name,
 					const GDBusMethodTable *methods,
@@ -1640,7 +1590,7 @@ gboolean g_dbus_emit_signal(DBusConnection *connection,
 
 	va_start(args, type);
 
-	result = emit_signal_valist(connection, path, interface,
+	result = g_dbus_emit_signal_valist(connection, path, interface,
 							name, type, args);
 
 	va_end(args);
@@ -1652,8 +1602,36 @@ gboolean g_dbus_emit_signal_valist(DBusConnection *connection,
 				const char *path, const char *interface,
 				const char *name, int type, va_list args)
 {
-	return emit_signal_valist(connection, path, interface,
-							name, type, args);
+	DBusMessage *signal;
+	dbus_bool_t ret;
+	const GDBusArgInfo *args_info;
+
+	if (!check_signal(connection, path, interface, name, &args_info))
+		return FALSE;
+
+	signal = dbus_message_new_signal(path, interface, name);
+	if (signal == NULL) {
+		error("Unable to allocate new %s.%s signal", interface,  name);
+		return FALSE;
+	}
+
+	ret = dbus_message_append_args_valist(signal, type, args);
+	if (!ret)
+		goto fail;
+
+	if (g_dbus_args_have_signature(args_info, signal) == FALSE) {
+		error("%s.%s: got unexpected signature '%s'", interface, name,
+					dbus_message_get_signature(signal));
+		ret = FALSE;
+		goto fail;
+	}
+
+	return g_dbus_send_message(connection, signal);
+
+fail:
+	dbus_message_unref(signal);
+
+	return ret;
 }
 
 static void process_properties_from_interface(struct generic_data *data,
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 06/10 v3] gdbus: Fix emitting PropertiesChanged twice
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (4 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 05/10 v3] gdbus: Avoid calling dbus_connection_send* Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 07/10 v3] core: Make use of g_dbus_send_message_with_reply Luiz Augusto von Dentz
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This fixes double emission of PropertiesChanged introduced by flushing
changes, the flushing can happen during the pending processing so the
pending_prop flag needs to be updated in the beginning and the list of
properties can be freed before g_dbus_send_message as it is not required
anymore.
---
 gdbus/object.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gdbus/object.c b/gdbus/object.c
index c4cf724..0822fe8 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -1642,6 +1642,8 @@ static void process_properties_from_interface(struct generic_data *data,
 	DBusMessageIter iter, dict, array;
 	GSList *invalidated;
 
+	data->pending_prop = FALSE;
+
 	if (iface->pending_prop == NULL)
 		return;
 
@@ -1708,8 +1710,6 @@ static void process_property_changes(struct generic_data *data)
 
 		process_properties_from_interface(data, iface);
 	}
-
-	data->pending_prop = FALSE;
 }
 
 void g_dbus_emit_property_changed(DBusConnection *connection,
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 07/10 v3] core: Make use of g_dbus_send_message_with_reply
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (5 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 06/10 v3] gdbus: Fix emitting PropertiesChanged twice Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 08/10 v3] neard: " Luiz Augusto von Dentz
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This replaces dbus_connection_send_with_reply with
g_dbus_send_message_with_reply which does not alter message order.
---
 src/agent.c   | 12 ++++++------
 src/profile.c |  4 ++--
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/agent.c b/src/agent.c
index b9e6e8c..7880ba6 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -370,7 +370,7 @@ static int agent_call_authorize_service(struct agent_request *req,
 				DBUS_TYPE_STRING, &uuid,
 				DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(btd_get_dbus_connection(),
+	if (g_dbus_send_message_with_reply(btd_get_dbus_connection(),
 						req->msg, &req->call,
 						REQUEST_TIMEOUT) == FALSE) {
 		error("D-Bus send failed");
@@ -480,7 +480,7 @@ static int pincode_request_new(struct agent_request *req, const char *device_pat
 	dbus_message_append_args(req->msg, DBUS_TYPE_OBJECT_PATH, &device_path,
 					DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(btd_get_dbus_connection(), req->msg,
+	if (g_dbus_send_message_with_reply(btd_get_dbus_connection(), req->msg,
 					&req->call, REQUEST_TIMEOUT) == FALSE) {
 		error("D-Bus send failed");
 		return -EIO;
@@ -574,7 +574,7 @@ static int passkey_request_new(struct agent_request *req,
 	dbus_message_append_args(req->msg, DBUS_TYPE_OBJECT_PATH, &device_path,
 					DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(btd_get_dbus_connection(), req->msg,
+	if (g_dbus_send_message_with_reply(btd_get_dbus_connection(), req->msg,
 					&req->call, REQUEST_TIMEOUT) == FALSE) {
 		error("D-Bus send failed");
 		return -EIO;
@@ -632,7 +632,7 @@ static int confirmation_request_new(struct agent_request *req,
 				DBUS_TYPE_UINT32, &passkey,
 				DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(btd_get_dbus_connection(), req->msg,
+	if (g_dbus_send_message_with_reply(btd_get_dbus_connection(), req->msg,
 				&req->call, REQUEST_TIMEOUT) == FALSE) {
 		error("D-Bus send failed");
 		return -EIO;
@@ -689,7 +689,7 @@ static int authorization_request_new(struct agent_request *req,
 				DBUS_TYPE_OBJECT_PATH, &device_path,
 				DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(btd_get_dbus_connection(), req->msg,
+	if (g_dbus_send_message_with_reply(btd_get_dbus_connection(), req->msg,
 				&req->call, REQUEST_TIMEOUT) == FALSE) {
 		error("D-Bus send failed");
 		return -EIO;
@@ -823,7 +823,7 @@ static int display_pincode_request_new(struct agent_request *req,
 					DBUS_TYPE_STRING, &pincode,
 					DBUS_TYPE_INVALID);
 
-	if (dbus_connection_send_with_reply(btd_get_dbus_connection(), req->msg,
+	if (g_dbus_send_message_with_reply(btd_get_dbus_connection(), req->msg,
 				&req->call, REQUEST_TIMEOUT) == FALSE) {
 		error("D-Bus send failed");
 		return -EIO;
diff --git a/src/profile.c b/src/profile.c
index 90c3535..57aead7 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -938,7 +938,7 @@ static bool send_new_connection(struct ext_profile *ext, struct ext_io *conn)
 
 	dbus_message_iter_close_container(&iter, &dict);
 
-	if (!dbus_connection_send_with_reply(btd_get_dbus_connection(),
+	if (!g_dbus_send_message_with_reply(btd_get_dbus_connection(),
 						msg, &conn->pending, -1)) {
 		error("%s: sending NewConnection failed", ext->name);
 		dbus_message_unref(msg);
@@ -1682,7 +1682,7 @@ static int send_disconn_req(struct ext_profile *ext, struct ext_io *conn)
 	dbus_message_append_args(msg, DBUS_TYPE_OBJECT_PATH, &path,
 							DBUS_TYPE_INVALID);
 
-	if (!dbus_connection_send_with_reply(btd_get_dbus_connection(),
+	if (!g_dbus_send_message_with_reply(btd_get_dbus_connection(),
 						msg, &conn->pending, -1)) {
 		error("%s: sending RequestDisconnection failed", ext->name);
 		dbus_message_unref(msg);
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 08/10 v3] neard: Make use of g_dbus_send_message_with_reply
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (6 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 07/10 v3] core: Make use of g_dbus_send_message_with_reply Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 09/10 v3] audio/media: " Luiz Augusto von Dentz
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This replaces dbus_connection_send_with_reply with
g_dbus_send_message_with_reply which does not alter message order.
---
 plugins/neard.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/neard.c b/plugins/neard.c
index e4a4d71..ea91c4d 100644
--- a/plugins/neard.c
+++ b/plugins/neard.c
@@ -158,7 +158,7 @@ static void register_agent(bool append_carrier)
 		dbus_message_append_args(message, DBUS_TYPE_STRING, &carrier,
 							DBUS_TYPE_INVALID);
 
-	if (!dbus_connection_send_with_reply(btd_get_dbus_connection(),
+	if (!g_dbus_send_message_with_reply(btd_get_dbus_connection(),
 							message, &call, -1)) {
 		dbus_message_unref(message);
 		error("D-Bus send failed");
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 09/10 v3] audio/media: Make use of g_dbus_send_message_with_reply
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (7 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 08/10 v3] neard: " Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-03 11:21 ` [PATCH BlueZ 10/10 v3] obexd: Make use of g_dbus_send_message* Luiz Augusto von Dentz
  2013-09-09 14:40 ` [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This replaces dbus_connection_send_with_reply with
g_dbus_send_message_with_reply which does not alter message order.
---
 profiles/audio/media.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 5a06b99..9c72b8d 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -325,7 +325,7 @@ static gboolean media_endpoint_async_call(DBusMessage *msg,
 	request = g_new0(struct endpoint_request, 1);
 
 	/* Timeout should be less than avdtp request timeout (4 seconds) */
-	if (dbus_connection_send_with_reply(btd_get_dbus_connection(),
+	if (g_dbus_send_message_with_reply(btd_get_dbus_connection(),
 						msg, &request->call,
 						REQUEST_TIMEOUT) == FALSE) {
 		error("D-Bus send failed");
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH BlueZ 10/10 v3] obexd: Make use of g_dbus_send_message*
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (8 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 09/10 v3] audio/media: " Luiz Augusto von Dentz
@ 2013-09-03 11:21 ` Luiz Augusto von Dentz
  2013-09-09 14:40 ` [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-03 11:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This replaces dbus_connection_send* with g_dbus_send_message* which do
not alter message order.
---
 obexd/plugins/bluetooth.c     | 2 +-
 obexd/plugins/pcsuite.c       | 5 ++---
 obexd/plugins/syncevolution.c | 6 +++---
 obexd/src/manager.c           | 3 +--
 4 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
index e4d518e..10f5e4f 100644
--- a/obexd/plugins/bluetooth.c
+++ b/obexd/plugins/bluetooth.c
@@ -317,7 +317,7 @@ static int register_profile(struct bluetooth_profile *profile)
 	}
 	dbus_message_iter_close_container(&iter, &opt);
 
-	if (!dbus_connection_send_with_reply(connection, msg, &call, -1)) {
+	if (!g_dbus_send_message_with_reply(connection, msg, &call, -1)) {
 		ret = -1;
 		unregister_profile(profile);
 		goto failed;
diff --git a/obexd/plugins/pcsuite.c b/obexd/plugins/pcsuite.c
index 4ce2fe4..6460aa9 100644
--- a/obexd/plugins/pcsuite.c
+++ b/obexd/plugins/pcsuite.c
@@ -351,7 +351,7 @@ static gboolean send_backup_dbus_message(const char *oper,
 					DBUS_TYPE_INVALID);
 
 	if (strcmp(oper, "open") == 0) {
-		ret = dbus_connection_send_with_reply(conn, msg, &pending_call,
+		ret = g_dbus_send_message_with_reply(conn, msg, &pending_call,
 							BACKUP_DBUS_TIMEOUT);
 		dbus_message_unref(msg);
 		if (ret) {
@@ -363,8 +363,7 @@ static gboolean send_backup_dbus_message(const char *oper,
 		} else
 			dbus_connection_unref(conn);
 	} else {
-		ret = dbus_connection_send(conn, msg, NULL);
-		dbus_message_unref(msg);
+		g_dbus_send_message(conn, msg);
 		dbus_connection_unref(conn);
 	}
 
diff --git a/obexd/plugins/syncevolution.c b/obexd/plugins/syncevolution.c
index 2d25d28..edc00c8 100644
--- a/obexd/plugins/syncevolution.c
+++ b/obexd/plugins/syncevolution.c
@@ -314,7 +314,7 @@ static int synce_close(void *object)
 	dbus_message_append_args(msg, DBUS_TYPE_BOOLEAN, &normal,
 				DBUS_TYPE_STRING, &error, DBUS_TYPE_INVALID);
 
-	dbus_connection_send_with_reply(context->dbus_conn, msg, &call, -1);
+	g_dbus_send_message_with_reply(context->dbus_conn, msg, &call, -1);
 	dbus_pending_call_set_notify(call, close_cb, NULL, NULL);
 	dbus_message_unref(msg);
 	dbus_pending_call_unref(call);
@@ -380,7 +380,7 @@ static ssize_t synce_read(void *object, void *buf, size_t count)
 	dbus_message_append_args(msg, DBUS_TYPE_BOOLEAN, &authenticate,
 			DBUS_TYPE_STRING, &session, DBUS_TYPE_INVALID);
 
-	if (!dbus_connection_send_with_reply(conn, msg, &call, -1)) {
+	if (!g_dbus_send_message_with_reply(conn, msg, &call, -1)) {
 		error("D-Bus call to %s failed.", SYNCE_SERVER_INTERFACE);
 		dbus_message_unref(msg);
 		return -EPERM;
@@ -424,7 +424,7 @@ static ssize_t synce_write(void *object, const void *buf, size_t count)
 	dbus_message_append_args(msg, DBUS_TYPE_STRING, &type,
 						DBUS_TYPE_INVALID);
 
-	if (!dbus_connection_send_with_reply(context->dbus_conn, msg,
+	if (!g_dbus_send_message_with_reply(context->dbus_conn, msg,
 								&call, -1)) {
 		error("D-Bus call to %s failed.", SYNCE_CONN_INTERFACE);
 		dbus_message_unref(msg);
diff --git a/obexd/src/manager.c b/obexd/src/manager.c
index dbfbef8..f64b7b9 100644
--- a/obexd/src/manager.c
+++ b/obexd/src/manager.c
@@ -776,8 +776,7 @@ int manager_request_authorization(struct obex_transfer *transfer, int32_t time,
 	dbus_message_append_args(msg, DBUS_TYPE_OBJECT_PATH, &transfer->path,
 							DBUS_TYPE_INVALID);
 
-	if (!dbus_connection_send_with_reply(connection,
-					msg, &call, TIMEOUT)) {
+	if (!g_dbus_send_message_with_reply(connection, msg, &call, TIMEOUT)) {
 		dbus_message_unref(msg);
 		return -EPERM;
 	}
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH BlueZ 00/10 v3] Fix message order
  2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
                   ` (9 preceding siblings ...)
  2013-09-03 11:21 ` [PATCH BlueZ 10/10 v3] obexd: Make use of g_dbus_send_message* Luiz Augusto von Dentz
@ 2013-09-09 14:40 ` Luiz Augusto von Dentz
  10 siblings, 0 replies; 12+ messages in thread
From: Luiz Augusto von Dentz @ 2013-09-09 14:40 UTC (permalink / raw)
  To: linux-bluetooth@vger.kernel.org

Hi,

On Tue, Sep 3, 2013 at 2:21 PM, Luiz Augusto von Dentz
<luiz.dentz@gmail.com> wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>
> s set fixes a couple of issues introduced with the use of ObjectManager due
> the processing of signals on idle to group changes, this has been causing
> issues with external components such as ofono and pulseaudio that sometimes
> receives connections from devices objects that have pending signals thus
> cannot be properly processed or have to be assumed paired and with certain
> UUIDs which is not ideal.
>
> v2: Fixes some commit messages as suggested by Lucas Demarchi, in addition to
> that rework flush mechanism to honor the order of the pending signals and make
> it work with any connection.
>
> v3: Add comments regarding the use of dbus_connection_send to prevent recursive
> calls to g_dbus_flush.
>
> Luiz Augusto von Dentz (10):
>   build: Fix not rebuilding bluetoothd if gdbus changes
>   unit: Add gdbus/client_check_order
>   gdbus: Fix sending ObjectManager/Properties signals out of order
>   gdbus: Add g_dbus_send_message_with_reply
>   gdbus: Avoid calling dbus_connection_send*
>   gdbus: Fix emitting PropertiesChanged twice
>   core: Make use of g_dbus_send_message_with_reply
>   neard: Make use of g_dbus_send_message_with_reply
>   audio/media: Make use of g_dbus_send_message_with_reply
>   obexd: Make use of g_dbus_send_message*
>
>  Makefile.am                   |   2 +-
>  gdbus/client.c                |  14 ++--
>  gdbus/gdbus.h                 |   3 +
>  gdbus/object.c                | 176 ++++++++++++++++++++++++------------------
>  obexd/plugins/bluetooth.c     |   2 +-
>  obexd/plugins/pcsuite.c       |   5 +-
>  obexd/plugins/syncevolution.c |   6 +-
>  obexd/src/manager.c           |   3 +-
>  plugins/neard.c               |   2 +-
>  profiles/audio/media.c        |   2 +-
>  src/agent.c                   |  12 +--
>  src/profile.c                 |   4 +-
>  unit/test-gdbus-client.c      |  71 +++++++++++++++++
>  13 files changed, 200 insertions(+), 102 deletions(-)
>
> --
> 1.8.3.1

I went ahead and pushed this upstream.


-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2013-09-09 14:40 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-03 11:21 [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 01/10 v3] build: Fix not rebuilding bluetoothd if gdbus changes Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 02/10 v3] unit: Add gdbus/client_check_order Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 03/10 v3] gdbus: Fix sending ObjectManager/Properties signals out of order Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 04/10 v3] gdbus: Add g_dbus_send_message_with_reply Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 05/10 v3] gdbus: Avoid calling dbus_connection_send* Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 06/10 v3] gdbus: Fix emitting PropertiesChanged twice Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 07/10 v3] core: Make use of g_dbus_send_message_with_reply Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 08/10 v3] neard: " Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 09/10 v3] audio/media: " Luiz Augusto von Dentz
2013-09-03 11:21 ` [PATCH BlueZ 10/10 v3] obexd: Make use of g_dbus_send_message* Luiz Augusto von Dentz
2013-09-09 14:40 ` [PATCH BlueZ 00/10 v3] Fix message order Luiz Augusto von Dentz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).