diff --git a/bridge/photokit_bridge.m b/bridge/photokit_bridge.m index d2a1efb..7a66ce2 100644 --- a/bridge/photokit_bridge.m +++ b/bridge/photokit_bridge.m @@ -10,8 +10,15 @@ static NSDictionary *make_error_dict(NSString *message) { } static BOOL semaphore_wait_with_timeout(dispatch_semaphore_t sem, int64_t seconds) { - dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC); - return dispatch_semaphore_wait(sem, timeout) == 0; + int64_t deadline = (int64_t)[NSDate timeIntervalSinceReferenceDate] + seconds; + while (1) { + if (photos_cancelled) return NO; + int64_t remaining = deadline - (int64_t)[NSDate timeIntervalSinceReferenceDate]; + if (remaining <= 0) return NO; + int64_t waitSecs = remaining < 1 ? remaining : 1; + dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, waitSecs * NSEC_PER_SEC); + if (dispatch_semaphore_wait(sem, timeout) == 0) return YES; + } } static NSDictionary *collection_to_dict(PHCollection *collection) {