Skip to contentSkip to conversation

client: Fix default_ctrl change when new adapter is found

PATCH Applied ERAMOTO Masaya 2 participants 2 messages Sep 14, 2017 Bluetooth drivers

lore
Share & tools
lore
#0 lore raw

PATCH v4 1/1 client: Fix default_ctrl change when new adapter is found

Since 4e111f3448a126786f3620be1b5ce969456edc65, when another adapter is found, the default adapter would be changed, which is not expected. Default adapter can only be changed by select command.

---
 client/main.c | 31 +++++++++++++++++++++++++++----
 1 file changed, 27 insertions(+), 4 deletions(-)

v4: add adapter_new() which allocates memory for a new adapter.
call find_ctrl() to find out the exist adapter.

client/main.c +27 -4
index 87eb131..2cb449f 100644
@@ -525,17 +525,40 @@ static void device_added(GDBusProxy *proxy)
 	}
 }
 
+static struct adapter *find_ctrl(GList *source, const char *path);
+
+static struct adapter *adapter_new(GDBusProxy *proxy)
+{
+	struct adapter *adapter = g_malloc0(sizeof(struct adapter));
+
+	ctrl_list = g_list_append(ctrl_list, adapter);
+
+	if (!default_ctrl)
+		default_ctrl = adapter;
+
+	return adapter;
+}
+
 static void adapter_added(GDBusProxy *proxy)
 {
-	default_ctrl = g_malloc0(sizeof(struct adapter));
-	default_ctrl->proxy = proxy;
-	ctrl_list = g_list_append(ctrl_list, default_ctrl);
+	struct adapter *adapter;
+	adapter = find_ctrl(ctrl_list, g_dbus_proxy_get_path(proxy));
+	if (!adapter)
+		adapter = adapter_new(proxy);
+
+	adapter->proxy = proxy;
+
 	print_adapter(proxy, COLORED_NEW);
 }
 
 static void ad_manager_added(GDBusProxy *proxy)
 {
-	default_ctrl->ad_proxy = proxy;
+	struct adapter *adapter;
+	adapter = find_ctrl(ctrl_list, g_dbus_proxy_get_path(proxy));
+	if (!adapter)
+		adapter = adapter_new(proxy);
+
+	adapter->ad_proxy = proxy;
 }
 
 static void proxy_added(GDBusProxy *proxy, void *user_data)
Signature · 1 line
2.7.4
maintainer Applied
#1 lore raw

Hi Eramoto,

Quoted 60 lines · ERAMOTO Masaya

Since 4e111f3448a126786f3620be1b5ce969456edc65, when another adapter is found, the default adapter would be changed, which is not expected. Default adapter can only be changed by select command.

---
 client/main.c | 31 +++++++++++++++++++++++++++----
 1 file changed, 27 insertions(+), 4 deletions(-)

v4: add adapter_new() which allocates memory for a new adapter.
call find_ctrl() to find out the exist adapter.

client/main.c +27 -5
index 87eb131..2cb449f 100644
@@ -525,17 +525,40 @@ static void device_added(GDBusProxy *proxy)
        }
 }
 
+static struct adapter *find_ctrl(GList *source, const char *path);
+
+static struct adapter *adapter_new(GDBusProxy *proxy)
+{
+       struct adapter *adapter = g_malloc0(sizeof(struct adapter));
+
+       ctrl_list = g_list_append(ctrl_list, adapter);
+
+       if (!default_ctrl)
+               default_ctrl = adapter;
+
+       return adapter;
+}
+
 static void adapter_added(GDBusProxy *proxy)
 {
-       default_ctrl = g_malloc0(sizeof(struct adapter));
-       default_ctrl->proxy = proxy;
-       ctrl_list = g_list_append(ctrl_list, default_ctrl);
+       struct adapter *adapter;
+       adapter = find_ctrl(ctrl_list, g_dbus_proxy_get_path(proxy));
+       if (!adapter)
+               adapter = adapter_new(proxy);
+
+       adapter->proxy = proxy;
+
        print_adapter(proxy, COLORED_NEW);
 }
 
 static void ad_manager_added(GDBusProxy *proxy)
 {
-       default_ctrl->ad_proxy = proxy;
+       struct adapter *adapter;
+       adapter = find_ctrl(ctrl_list, g_dbus_proxy_get_path(proxy));
+       if (!adapter)
+               adapter = adapter_new(proxy);
+
+       adapter->ad_proxy = proxy;
 }
 
 static void proxy_added(GDBusProxy *proxy, void *user_data)
--
Quoted 1 line

2.7.4

Applied, thanks.

Signature · 1 line
Luiz Augusto von Dentz