[PATCH] Prevent discovery failure if the adapter is already in periodic inquiry mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If an adapter is put into periodic inquiry mode from outside of
bluetoothd, bluetoothd will get errors when it tries to enter periodic
inquiry mode itself.  This error prevents bluetoothd from creating a
discovery session in the btd_adapter data structure, which in turn
prevents bluetoothd from clearing the list of devices for which it has
emitted dbus signals.  This causes discovery sessions initiated over
dbus to fail to detect many devices (specifically, any devices that
were previously detected by bluetoothd before the dbus client called
StartDiscovery, and that are still in range).

This patch creates a discovery session object in the btd_adapter structure
even if the request to initiate periodic inquiry fails.  This in turn
enables the existing discovery session handling machinery to properly
manage the list of devices found in the current discovery session.
---
 src/adapter.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 52b58c4..de68958 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1127,7 +1127,7 @@ static DBusMessage *adapter_start_discovery(DBusConnection *conn,
 	struct session_req *req;
 	struct btd_adapter *adapter = data;
 	const char *sender = dbus_message_get_sender(msg);
-	int err;
+	int err = 0;
 
 	if (!adapter->up)
 		return adapter_not_ready(msg);
@@ -1146,15 +1146,15 @@ static DBusMessage *adapter_start_discovery(DBusConnection *conn,
 	else
 		err = start_periodic_inquiry(adapter);
 
-	if (err < 0)
-		return failed_strerror(msg, -err);
-
 done:
 	req = create_session(adapter, conn, msg, 0,
 				session_owner_exit);
 
 	adapter->disc_sessions = g_slist_append(adapter->disc_sessions, req);
 
+	if (err < 0)
+		return failed_strerror(msg, -err);
+
 	return dbus_message_new_method_return(msg);
 }
 
-- 
1.6.2

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux