From a04aa259ed54fe9fd2fc7c4da001fe7807618236 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 5 Sep 2018 15:41:33 -0400 Subject: [PATCH] Fix bug in sync loading of thumbnails. --- .../src/Messages/Attachments/TSAttachmentStream.m | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m b/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m index aab180e6c..e856d18bd 100644 --- a/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m +++ b/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream.m @@ -739,11 +739,12 @@ typedef void (^OWSLoadedThumbnailSuccess)(OWSLoadedThumbnail *loadedThumbnail); { __block dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - __block OWSLoadedThumbnail *_Nullable loadedThumbnail = nil; - loadedThumbnail = [self loadedThumbnailWithThumbnailDimensionPoints:kThumbnailDimensionPointsSmall + __block OWSLoadedThumbnail *_Nullable asyncLoadedThumbnail = nil; + OWSLoadedThumbnail *_Nullable syncLoadedThumbnail = nil; + syncLoadedThumbnail = [self loadedThumbnailWithThumbnailDimensionPoints:kThumbnailDimensionPointsSmall success:^(OWSLoadedThumbnail *asyncLoadedThumbnail) { @synchronized(self) { - loadedThumbnail = asyncLoadedThumbnail; + asyncLoadedThumbnail = asyncLoadedThumbnail; } dispatch_semaphore_signal(semaphore); } @@ -751,10 +752,14 @@ typedef void (^OWSLoadedThumbnailSuccess)(OWSLoadedThumbnail *loadedThumbnail); dispatch_semaphore_signal(semaphore); }]; + if (syncLoadedThumbnail) { + return syncLoadedThumbnail; + } + // Wait up to N seconds. dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC))); @synchronized(self) { - return loadedThumbnail; + return asyncLoadedThumbnail; } }