darwin: Fix regression causing re-enumeration timeout

Fix time calculation for negative nanosecond deltas to resolve
re-enumerate timeout. Fixup of commit a07ecfe02.

Fixes #1637
References #1610
This commit is contained in:
Zeng Guang
2025-05-02 06:12:12 +08:00
committed by Tormod Volden
parent c6c45b8e8c
commit 9cef804b24
2 changed files with 5 additions and 6 deletions

View File

@@ -2131,12 +2131,11 @@ static int darwin_reenumerate_device (struct libusb_device_handle *dev_handle, b
struct timespec delay = {.tv_sec = 0, .tv_nsec = 1000};
nanosleep (&delay, NULL);
struct timespec now;
struct timespec now, delta;
usbi_get_monotonic_time(&now);
long delta_sec = now.tv_sec - start.tv_sec;
long delta_nsec = now.tv_nsec - start.tv_nsec;
unsigned long long elapsed_us = (unsigned long long)delta_sec * USEC_PER_SEC +
(unsigned long long)delta_nsec / 1000ULL;
TIMESPEC_SUB(&now, &start, &delta);
unsigned long long elapsed_us = (unsigned long long)delta.tv_sec * USEC_PER_SEC +
(unsigned long long)delta.tv_nsec / 1000ULL;
if (elapsed_us >= DARWIN_REENUMERATE_TIMEOUT_US) {
usbi_err (ctx, "darwin/reenumerate_device: timeout waiting for reenumerate");

View File

@@ -1 +1 @@
#define LIBUSB_NANO 11947
#define LIBUSB_NANO 11948