diff options
Diffstat (limited to 'src/device.c')
| -rw-r--r-- | src/device.c | 26 | 
1 files changed, 17 insertions, 9 deletions
diff --git a/src/device.c b/src/device.c index 81e39e0b..bd58f7c3 100644 --- a/src/device.c +++ b/src/device.c @@ -1275,7 +1275,7 @@ static gboolean start_discovery(gpointer user_data)  	return FALSE;  } -gboolean device_set_paired(DBusConnection *conn, struct btd_device *device, +int device_set_paired(DBusConnection *conn, struct btd_device *device,  			struct bonding_request_info *bonding)  {  	dbus_bool_t paired = TRUE; @@ -1286,22 +1286,30 @@ gboolean device_set_paired(DBusConnection *conn, struct btd_device *device,  						DEVICE_INTERFACE, "Paired",  						DBUS_TYPE_BOOLEAN, &paired); -	if (device->discov_timer) -		return FALSE; -  	/* If we were initiators start service discovery immediately.  	 * However if the other end was the initator wait a few seconds  	 * before SDP. This is due to potential IOP issues if the other  	 * end starts doing SDP at the same time as us */ -	if (bonding) -		device_browse(device, bonding->conn, -				bonding->msg, NULL); -	else +	if (bonding) { +		/* If we are initiators remove any discovery timer and just +		 * start discovering services directly */ +		if (device->discov_timer) { +			g_source_remove(device->discov_timer); +			device->discov_timer = 0; +		} + +		return device_browse(device, bonding->conn, bonding->msg, +					NULL); +	} + +	/* If we are not initiators and there is no currently active discovery +	 * or discovery timer, set the discovery timer */ +	if (!device->discov_active && !device->discov_timer)  		device->discov_timer = g_timeout_add(DISCOVERY_TIMER,  							start_discovery,  							device); -	return TRUE; +	return 0;  }  int btd_register_device_driver(struct btd_device_driver *driver)  | 
