Diff between 33d13bbc5703185ab3f15e4429df324987f3f225 and 7a8d1be9755f39ca2d3060b4ba9f9ce58c83c0ed

Changed Files

File Additions Deletions Status
src/device.c +17 -5 modified

Full Patch

diff --git a/src/device.c b/src/device.c
index f2447c4..6d29eb8 100644
--- a/src/device.c
+++ b/src/device.c
@@ -4487,12 +4487,24 @@ bool device_is_name_resolve_allowed(struct btd_device *device)
 
 	clock_gettime(CLOCK_MONOTONIC, &now);
 
-	/* If now < failed_time, it means the clock has somehow turned back,
-	 * possibly because of system restart. Allow name request in this case.
+	/* failed_time is empty (0), meaning no prior failure. */
+	if (device->name_resolve_failed_time == 0)
+		return true;
+
+	/* now < failed_time, meaning the clock has somehow turned back,
+	 * possibly because of system restart. Allow just to be safe.
+	 */
+	if (now.tv_sec < device->name_resolve_failed_time)
+		return true;
+
+	/* now >= failed_time + name_request_retry_delay, meaning the
+	 * period of not sending name request is over.
 	 */
-	return now.tv_sec < device->name_resolve_failed_time ||
-		now.tv_sec >= device->name_resolve_failed_time +
-					btd_opts.name_request_retry_delay;
+	if (now.tv_sec >= device->name_resolve_failed_time +
+					btd_opts.name_request_retry_delay)
+		return true;
+
+	return false;
 }
 
 void device_name_resolve_fail(struct btd_device *device)