From 11e07ff409d64ed7cf48877a325b8b4ad737daef Mon Sep 17 00:00:00 2001 From: Garrett Moon Date: Fri, 4 Nov 2016 11:33:17 -0700 Subject: [PATCH] Need to trampoline to main to make contents check safe if nodes are loaded. (#2545) --- AsyncDisplayKit/ASDisplayNode.mm | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index e528cff70d..027dceae4d 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1143,7 +1143,15 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) [self setCalculatedDisplayNodeLayout:_pendingLayoutTransition.pendingLayout]; [self _completeLayoutTransition:_pendingLayoutTransition]; } - [self _pendingLayoutTransitionDidComplete]; + + // Trampoline to the main thread if necessary + if (_pendingLayoutTransition && _pendingLayoutTransition.isSynchronous == NO) { + [self _pendingLayoutTransitionDidComplete]; + } else { + ASPerformBlockOnMainThread(^{ + [self _pendingLayoutTransitionDidComplete]; + }); + } } /* @@ -1158,7 +1166,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) } // Trampoline to the main thread if necessary - if (ASDisplayNodeThreadIsMain() || layoutTransition.isSynchronous == NO) { + if (layoutTransition.isSynchronous == NO) { [layoutTransition commitTransition]; } else { // Subnode insertions and removals need to happen always on the main thread if at least one subnode is already loaded @@ -1186,7 +1194,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) if (CGSizeEqualToSize(layoutSize, CGSizeZero)) { return; } - + if (!_placeholderImage) { _placeholderImage = [self placeholderImage]; }