Diff between b501a6fab756360b0ac357817eeccfbc73850b56 and 83400b1009ec0d62b5ba2805ed1d6189ed7b8678

Changed Files

File Additions Deletions Status
src/device.c +13 -0 modified

Full Patch

diff --git a/src/device.c b/src/device.c
index 753e03a..54a8446 100644
--- a/src/device.c
+++ b/src/device.c
@@ -185,6 +185,7 @@ struct btd_device {
 	gboolean	blocked;
 	gboolean	bonded;
 	gboolean	auto_connect;
+	gboolean	disable_auto_connect;
 	gboolean	general_connect;
 
 	bool		legacy;
@@ -1025,6 +1026,13 @@ static DBusMessage *disconnect(DBusConnection *conn, DBusMessage *msg,
 	if (!device->connected)
 		return btd_error_not_connected(msg);
 
+	/*
+	 * Disable connections through passive scanning until
+	 * Device1.Connect is called
+	 */
+	if (device->auto_connect)
+		device->disable_auto_connect = TRUE;
+
 	device_request_disconnect(device, msg);
 
 	return NULL;
@@ -1220,6 +1228,8 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg,
 
 		device_set_temporary(dev, FALSE);
 
+		dev->disable_auto_connect = FALSE;
+
 		err = device_connect_le(dev);
 		if (err < 0)
 			return btd_error_failed(msg, strerror(-err));
@@ -3487,6 +3497,9 @@ void device_set_auto_connect(struct btd_device *device, gboolean enable)
 
 bool device_get_auto_connect(struct btd_device *device)
 {
+	if (device->disable_auto_connect)
+		return false;
+
 	return device->auto_connect;
 }