Fix bug in sync loading of thumbnails.

pull/1/head
Matthew Chen 7 years ago
parent 5bdbf76b08
commit a04aa259ed

@ -739,11 +739,12 @@ typedef void (^OWSLoadedThumbnailSuccess)(OWSLoadedThumbnail *loadedThumbnail);
{ {
__block dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); __block dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
__block OWSLoadedThumbnail *_Nullable loadedThumbnail = nil; __block OWSLoadedThumbnail *_Nullable asyncLoadedThumbnail = nil;
loadedThumbnail = [self loadedThumbnailWithThumbnailDimensionPoints:kThumbnailDimensionPointsSmall OWSLoadedThumbnail *_Nullable syncLoadedThumbnail = nil;
syncLoadedThumbnail = [self loadedThumbnailWithThumbnailDimensionPoints:kThumbnailDimensionPointsSmall
success:^(OWSLoadedThumbnail *asyncLoadedThumbnail) { success:^(OWSLoadedThumbnail *asyncLoadedThumbnail) {
@synchronized(self) { @synchronized(self) {
loadedThumbnail = asyncLoadedThumbnail; asyncLoadedThumbnail = asyncLoadedThumbnail;
} }
dispatch_semaphore_signal(semaphore); dispatch_semaphore_signal(semaphore);
} }
@ -751,10 +752,14 @@ typedef void (^OWSLoadedThumbnailSuccess)(OWSLoadedThumbnail *loadedThumbnail);
dispatch_semaphore_signal(semaphore); dispatch_semaphore_signal(semaphore);
}]; }];
if (syncLoadedThumbnail) {
return syncLoadedThumbnail;
}
// Wait up to N seconds. // Wait up to N seconds.
dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC))); dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)));
@synchronized(self) { @synchronized(self) {
return loadedThumbnail; return asyncLoadedThumbnail;
} }
} }

Loading…
Cancel
Save