Skip to content

[ASPrimitiveTraitCollection] Convert to atomic to avoid unusual deadlock scenario. #353

Closed
@appleguy

Description

In this case, we deadlock because a data controller operation on the main thread can't proceed, because the last data controller background layout operation is stuck on updating the trait collection, which is also what the main thread is doing.

Since ASPrimitiveTraitCollection is a struct, this should be solvable by using an atomic instead.

(lldb) bt all
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x0000000116fac386 libsystem_kernel.dylib`semaphore_wait_trap + 10
    frame #1: 0x0000000116c50413 libdispatch.dylib`_os_semaphore_wait + 16
    frame #2: 0x0000000116c36434 libdispatch.dylib`_dispatch_group_wait_slow + 151
  * frame #3: 0x000000010c910d36 DebugHarness`::-[ASDataController _scheduleBlockOnMainSerialQueue:](self=0x000060800010be20, _cmd="_scheduleBlockOnMainSerialQueue:", block=0x000000010c9105e0) at ASDataController.mm:808
    frame #4: 0x000000010c91057e DebugHarness`::__40-[ASDataController environmentDidChange]_block_invoke((null)=<unavailable>) at ASDataController.mm:794
    frame #5: 0x000000010c9bf383 DebugHarness`::ASPerformBlockOnMainThread(block=0x000000010c9104d0)()) at ASInternalHelpers.m:69
    frame #6: 0x000000010c91046f DebugHarness`::-[ASDataController environmentDidChange](self=0x000060800010be20, _cmd="environmentDidChange") at ASDataController.mm:786
    frame #7: 0x000000010c7eb419 DebugHarness`::-[ASCollectionNode setPrimitiveTraitCollection:](self=0x00007fafd2502260, _cmd="setPrimitiveTraitCollection:", traitCollection=ASPrimitiveTraitCollection @ 0x00007fff5431bc80) at ASCollectionNode.mm:787
    frame #8: 0x000000010c8e74f0 DebugHarness`::-[ASViewController propagateNewTraitCollection:](self=0x00007fafd2507740, _cmd="propagateNewTraitCollection:", traitCollection=ASPrimitiveTraitCollection @ 0x00007fff5431c040) at ASViewController.mm:287
    frame #9: 0x000000010c8e6025 DebugHarness`::__42-[ASViewController viewWillLayoutSubviews]_block_invoke((null)=<unavailable>) at ASViewController.mm:147
    frame #10: 0x000000010f4a9d3e UIKit`+[UIView(Animation) performWithoutAnimation:] + 90
    frame #11: 0x000000010c8e5ce6 DebugHarness`::-[ASViewController viewWillLayoutSubviews](self=0x00007fafd2507740, _cmd="viewWillLayoutSubviews") at ASViewController.mm:142
    frame #12: 0x000000010f4b50cf UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 952
    frame #13: 0x00000001120ac904 QuartzCore`-[CALayer layoutSublayers] + 146
    frame #14: 0x000000010c949621 DebugHarness`::-[_ASDisplayLayer layoutSublayers](self=0x0000618000049630, _cmd="layoutSublayers") at _ASDisplayLayer.mm:103
    frame #15: 0x00000001120a0526 QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 370
    frame #16: 0x000000010f4a2fe4 UIKit`-[UIView(Hierarchy) layoutBelowIfNeeded] + 1108
    frame #17: 0x000000010c9a9bec DebugHarness`::-[ASDisplayNode(self=0x00007fafd2502260, _cmd="layoutIfNeeded") layoutIfNeeded]() at ASDisplayNode+UIViewBridge.mm:406
    frame #18: 0x000000010c848631 DebugHarness`::-[ASDisplayNode didEnterPreloadState](self=0x00007fafd2502260, _cmd="didEnterPreloadState") at ASDisplayNode.mm:2889
    frame #19: 0x000000010c7e2d34 DebugHarness`::-[ASCollectionNode didEnterPreloadState](self=0x00007fafd2502260, _cmd="didEnterPreloadState") at ASCollectionNode.mm:216
    frame #20: 0x000000010c846b24 DebugHarness`::-[ASDisplayNode setInterfaceState:](self=0x00007fafd2502260, _cmd="setInterfaceState:", newState=15) at ASDisplayNode.mm:2714
    frame #21: 0x000000010c845875 DebugHarness`::-[ASDisplayNode willEnterHierarchy](self=0x00007fafd2502260, _cmd="willEnterHierarchy") at ASDisplayNode.mm:2589
    frame #22: 0x000000010c843f52 DebugHarness`::-[ASDisplayNode __enterHierarchy](self=0x00007fafd2502260, _cmd="__enterHierarchy") at ASDisplayNode.mm:2449
    frame #23: 0x000000010c80b464 DebugHarness`::-[ASCollectionView willMoveToWindow:](self=0x00007fafd581d000, _cmd="willMoveToWindow:", newWindow=0x00007fafd4803120) at ASCollectionView.mm:2040
    frame #24: 0x000000010f4a097d UIKit`-[UIView(Hierarchy) _willMoveToWindow:] + 861
    frame #25: 0x000000010f4c8284 UIKit`-[UIScrollView _willMoveToWindow:] + 158
    frame #26: 0x000000010f4b10f2 UIKit`-[UIView(Internal) _addSubview:positioned:relativeTo:] + 447
    frame #27: 0x000000010f49f9a8 UIKit`-[UIView(Hierarchy) addSubview:] + 838
    frame #28: 0x000000010f3de7c2 UIKit`-[_UIParallaxDimmingView didMoveToWindow] + 179
    frame #29: 0x000000010f4aebb1 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 1737
    frame #30: 0x000000010f4ae7f3 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 779
    frame #31: 0x000000010f4a1846 UIKit`__45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 151
    frame #32: 0x000000010f4a172d UIKit`-[UIView(Hierarchy) _postMovedFromSuperview:] + 828
    frame #33: 0x000000010f4b16ba UIKit`-[UIView(Internal) _addSubview:positioned:relativeTo:] + 1927
    frame #34: 0x000000010f49f9a8 UIKit`-[UIView(Hierarchy) addSubview:] + 838
    frame #35: 0x000000010f3d9632 UIKit`__53-[_UINavigationParallaxTransition animateTransition:]_block_invoke_2 + 2366
    frame #36: 0x000000010f4a9d3e UIKit`+[UIView(Animation) performWithoutAnimation:] + 90
    frame #37: 0x000000010f3d8c9f UIKit`__53-[_UINavigationParallaxTransition animateTransition:]_block_invoke + 260
    frame #38: 0x000000010f4afc5d UIKit`+[UIView(Internal) _performBlockDelayingTriggeringResponderEvents:] + 188
    frame #39: 0x000000010f3d86f5 UIKit`-[_UINavigationParallaxTransition animateTransition:] + 1153
    frame #40: 0x000000010f5c5c43 UIKit`-[UINavigationController _startCustomTransition:] + 4324
    frame #41: 0x000000010f5d5617 UIKit`-[UINavigationController _startDeferredTransitionIfNeeded:] + 687
    frame #42: 0x000000010f5d67f1 UIKit`-[UINavigationController __viewWillLayoutSubviews] + 58
    frame #43: 0x000000010f7c82bc UIKit`-[UILayoutContainerView layoutSubviews] + 231
    frame #44: 0x000000010f4b520b UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1268
    frame #45: 0x00000001120ac904 QuartzCore`-[CALayer layoutSublayers] + 146
    frame #46: 0x00000001120a0526 QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 370
    frame #47: 0x00000001120a03a0 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 24
    frame #48: 0x000000011202fe92 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 294
    frame #49: 0x000000011205c130 QuartzCore`CA::Transaction::commit() + 468
    frame #50: 0x000000010f41d313 UIKit`_afterCACommitHandler + 272
    frame #51: 0x000000011626f717 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    frame #52: 0x000000011626f687 CoreFoundation`__CFRunLoopDoObservers + 391
    frame #53: 0x0000000116254720 CoreFoundation`__CFRunLoopRun + 1200
    frame #54: 0x0000000116254016 CoreFoundation`CFRunLoopRunSpecific + 406
    frame #55: 0x0000000117835a24 GraphicsServices`GSEventRunModal + 62
    frame #56: 0x000000010f3f20d4 UIKit`UIApplicationMain + 159
    frame #57: 0x000000010b96ef24 DebugHarness`main at main.m:7
    frame #58: 0x0000000116c9d65d libdyld.dylib`start + 1
    frame #59: 0x0000000116c9d65d libdyld.dylib`start + 1

  thread #2, queue = 'com.apple.libdispatch-manager'
    frame #0: 0x0000000116fb4dc6 libsystem_kernel.dylib`kevent_qos + 10
    frame #1: 0x0000000116c42efb libdispatch.dylib`_dispatch_mgr_wait_for_event + 66
    frame #2: 0x0000000116c3c872 libdispatch.dylib`_dispatch_mgr_invoke + 197
    frame #3: 0x0000000116c3c6a7 libdispatch.dylib`_dispatch_mgr_thread + 54

  thread #5, name = 'com.apple.uikit.eventfetch-thread'
    frame #0: 0x0000000116fac34a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x0000000116fab797 libsystem_kernel.dylib`mach_msg + 55
    frame #2: 0x00000001162552e4 CoreFoundation`__CFRunLoopServiceMachPort + 212
    frame #3: 0x00000001162547a9 CoreFoundation`__CFRunLoopRun + 1337
    frame #4: 0x0000000116254016 CoreFoundation`CFRunLoopRunSpecific + 406
    frame #5: 0x000000010eeb8480 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 274
    frame #6: 0x000000010ef3dae9 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 87
    frame #7: 0x000000010fe62931 UIKit`-[UIEventFetcher threadMain] + 118
    frame #8: 0x000000010eec7fb1 Foundation`__NSThread__start__ + 1197
    frame #9: 0x0000000116fe893b libsystem_pthread.dylib`_pthread_body + 180
    frame #10: 0x0000000116fe8887 libsystem_pthread.dylib`_pthread_start + 286
    frame #11: 0x0000000116fe808d libsystem_pthread.dylib`thread_start + 13

  thread #7, queue = 'com.apple.root.default-qos'
    frame #0: 0x0000000116fb3c22 libsystem_kernel.dylib`__psynch_mutexwait + 10
    frame #1: 0x0000000116fe8dfa libsystem_pthread.dylib`_pthread_mutex_lock_wait + 100
    frame #2: 0x0000000116fe6519 libsystem_pthread.dylib`_pthread_mutex_lock_slow + 285
    frame #3: 0x000000010c7d7fb3 DebugHarness`ASDN::Mutex::lock(this=0x00007fafd402b408) at ASThread.h:217
    frame #4: 0x000000010c8145e8 DebugHarness`::-[ASDisplayNode(self=0x00007fafd402b400, _cmd="setPrimitiveTraitCollection:", traitCollection=ASPrimitiveTraitCollection @ 0x000070000c9d2300) setPrimitiveTraitCollection:](ASPrimitiveTraitCollection) at ASDisplayNode+Layout.mm:107
    frame #5: 0x000000010c92f565 DebugHarness`::ASTraitCollectionPropagateDown(element=0x00007fafd402b400, traitCollection=ASPrimitiveTraitCollection @ 0x000070000c9d2550) at ASTraitCollection.m:27
    frame #6: 0x000000010c92f765 DebugHarness`::ASTraitCollectionPropagateDown(element=0x00006000001c88e0, traitCollection=ASPrimitiveTraitCollection @ 0x000070000c9d27a0) at ASTraitCollection.m:31
    frame #7: 0x000000010c8312ba DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd5063800, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = +Inf))) at ASDisplayNode.mm:1018
    frame #8: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd5063800, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = +Inf)), size=ASLayoutElementSize @ 0x000070000c9d2e40, parentSize=(width = NaN, height = NaN)) at ASDisplayNode.mm:949
    frame #9: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd5063800, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = +Inf)), parentSize=(width = NaN, height = NaN)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #10: 0x000000010c9eb7ab DebugHarness`crossChildLayout(child=0x00006000001c84a8, style=0x000070000c9d3d60, stackMin=0, stackMax=+Inf, crossMin=0, crossMax=343, parentSize=(width = NaN, height = NaN)) at ASStackUnpositionedLayout.mm:73
    frame #11: 0x000000010c9eb571 DebugHarness`::___ZL43layoutItemsAlongUnconstrainedStackDimensionRNSt3__16vectorI21ASStackLayoutSpecItemNS_9allocatorIS1_EEEERK22ASStackLayoutSpecStylebRK11ASSizeRange6CGSizeb_block_invoke((null)=<unavailable>, i=1) at ASStackUnpositionedLayout.mm:689
    frame #12: 0x000000010c9eb243 DebugHarness`dispatchApplyIfNeeded(iterationCount=2, forced=NO, work=0x000000010c9eb330) block_pointer) at ASStackUnpositionedLayout.mm:92
    frame #13: 0x000000010c9e7a55 DebugHarness`layoutItemsAlongUnconstrainedStackDimension(items=size=2, style=0x000070000c9d3d60, concurrent=NO, sizeRange=0x000070000c9d3df0, parentSize=(width = NaN, height = NaN), useOptimizedFlexing=NO) at ASStackUnpositionedLayout.mm:684
    frame #14: 0x000000010c9e6b2c DebugHarness`ASStackUnpositionedLayout::compute(children=size=2, style=0x000070000c9d3d60, sizeRange=0x000070000c9d3df0, concurrent=NO) at ASStackUnpositionedLayout.mm:726
    frame #15: 0x000000010c992e18 DebugHarness`::-[ASStackLayoutSpec calculateLayoutThatFits:](self=0x00006000001c9d80, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) at ASStackLayoutSpec.mm:146
    frame #16: 0x000000010c9836a9 DebugHarness`::-[ASLayoutSpec calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00006000001c9d80, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c9d3fd0, parentSize=(width = 343, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #17: 0x000000010c98341e DebugHarness`::-[ASLayoutSpec layoutThatFits:parentSize:](self=0x00006000001c9d80, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), parentSize=(width = 343, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #18: 0x000000010c9831b4 DebugHarness`::-[ASLayoutSpec layoutThatFits:](self=0x00006000001c9d80, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) at ASLayoutSpec.mm:93
    frame #19: 0x000000010c8313da DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd4917860, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) at ASDisplayNode.mm:1029
    frame #20: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd4917860, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c9d4870, parentSize=(width = 343, height = 1.7976931348623157E+308)) at ASDisplayNode.mm:949
    frame #21: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd4917860, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), parentSize=(width = 343, height = 1.7976931348623157E+308)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #22: 0x000000010c812ff4 DebugHarness`::-[ASDisplayNode(self=0x00007fafd4917860, _cmd="measureWithSizeRange:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) measureWithSizeRange:](ASSizeRange) at ASDisplayNode+Layout.mm:60
    frame #23: 0x000000010c812f2a DebugHarness`::-[ASDisplayNode(self=0x00007fafd4917860, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) layoutThatFits:](ASSizeRange) at ASDisplayNode+Layout.mm:54
    frame #24: 0x000000010c997af9 DebugHarness`::ASLayoutElementYogaMeasureFunc(yogaNode=0x00007fafd5063200, width=343, widthMode=YGMeasureModeAtMost, height=NaN, heightMode=YGMeasureModeUndefined) at ASYogaUtilities.mm:144
    frame #25: 0x000000010cb4fe0d DebugHarness`YGNodeWithMeasureFuncSetMeasuredDimensions(node=0x00007fafd5063200, availableWidth=359, availableHeight=NaN, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN) at Yoga.c:1729
    frame #26: 0x000000010cb4a1e8 DebugHarness`YGNodelayoutImpl(node=0x00007fafd5063200, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, config=0x000000010d916008) at Yoga.c:1978
    frame #27: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd5063200, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, reason="measure", config=0x000000010d916008) at Yoga.c:3287
    frame #28: 0x000000010cb50e78 DebugHarness`YGNodeComputeFlexBasisForChild(node=0x00007fafd5062c00, child=0x00007fafd5063200, width=359, widthMode=YGMeasureModeAtMost, height=NaN, parentWidth=359, parentHeight=NaN, heightMode=YGMeasureModeUndefined, direction=YGDirectionLTR, config=0x000000010d916008) at Yoga.c:1531
    frame #29: 0x000000010cb4aa2a DebugHarness`YGNodelayoutImpl(node=0x00007fafd5062c00, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, config=0x000000010d916008) at Yoga.c:2138
    frame #30: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd5062c00, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, reason="measure", config=0x000000010d916008) at Yoga.c:3287
    frame #31: 0x000000010cb50e78 DebugHarness`YGNodeComputeFlexBasisForChild(node=0x00007fafd3853e00, child=0x00007fafd5062c00, width=359, widthMode=YGMeasureModeAtMost, height=NaN, parentWidth=359, parentHeight=NaN, heightMode=YGMeasureModeUndefined, direction=YGDirectionLTR, config=0x000000010d916008) at Yoga.c:1531
    frame #32: 0x000000010cb4aa2a DebugHarness`YGNodelayoutImpl(node=0x00007fafd3853e00, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=false, config=0x000000010d916008) at Yoga.c:2138
    frame #33: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd3853e00, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=false, reason="measure", config=0x000000010d916008) at Yoga.c:3287
    frame #34: 0x000000010cb50e78 DebugHarness`YGNodeComputeFlexBasisForChild(node=0x00007fafd385ba00, child=0x00007fafd3853e00, width=375, widthMode=YGMeasureModeExactly, height=NaN, parentWidth=375, parentHeight=NaN, heightMode=YGMeasureModeUndefined, direction=YGDirectionLTR, config=0x000000010d916008) at Yoga.c:1531
    frame #35: 0x000000010cb4aa2a DebugHarness`YGNodelayoutImpl(node=0x00007fafd385ba00, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionInherit, widthMeasureMode=YGMeasureModeExactly, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=true, config=0x000000010d916008) at Yoga.c:2138
    frame #36: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd385ba00, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionInherit, widthMeasureMode=YGMeasureModeExactly, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=true, reason="initial", config=0x000000010d916008) at Yoga.c:3287
    frame #37: 0x000000010cb4dc67 DebugHarness`YGNodeCalculateLayout(node=0x00007fafd385ba00, parentWidth=375, parentHeight=NaN, parentDirection=YGDirectionInherit) at Yoga.c:3466
    frame #38: 0x000000010c824a0c DebugHarness`::-[ASDisplayNode(self=0x00007fafd271b500, _cmd="calculateLayoutFromYogaRoot:", rootConstrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) calculateLayoutFromYogaRoot:](ASSizeRange) at ASDisplayNode+Yoga.mm:259
    frame #39: 0x000000010c830882 DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd271b500, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASDisplayNode.mm:971
    frame #40: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd271b500, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c9d7060, parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASDisplayNode.mm:949
    frame #41: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd271b500, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), parentSize=(width = 375, height = 1.7976931348623157E+308)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #42: 0x000000010c986215 DebugHarness`::-[ASWrapperLayoutSpec calculateLayoutThatFits:](self=0x0000600000133100, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASLayoutSpec.mm:275
    frame #43: 0x000000010c9836a9 DebugHarness`::-[ASLayoutSpec calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x0000600000133100, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c9d7ae0, parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #44: 0x000000010c98341e DebugHarness`::-[ASLayoutSpec layoutThatFits:parentSize:](self=0x0000600000133100, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #45: 0x000000010c9831b4 DebugHarness`::-[ASLayoutSpec layoutThatFits:](self=0x0000600000133100, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASLayoutSpec.mm:93
    frame #46: 0x000000010c8313da DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd270a460, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASDisplayNode.mm:1029
    frame #47: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd270a460, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c9d8380, parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASDisplayNode.mm:949
    frame #48: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd270a460, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), parentSize=(width = 375, height = 1.7976931348623157E+308)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #49: 0x000000010c812ff4 DebugHarness`::-[ASDisplayNode(self=0x00007fafd270a460, _cmd="measureWithSizeRange:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) measureWithSizeRange:](ASSizeRange) at ASDisplayNode+Layout.mm:60
    frame #50: 0x000000010c812f2a DebugHarness`::-[ASDisplayNode(self=0x00007fafd270a460, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) layoutThatFits:](ASSizeRange) at ASDisplayNode+Layout.mm:54
    frame #51: 0x000000010c9049b0 DebugHarness`::-[ASDataController _layoutNode:withConstrainedSize:](self=0x000060800010be20, _cmd="_layoutNode:withConstrainedSize:", node=0x00007fafd270a460, constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASDataController.mm:198
    frame #52: 0x000000010c905b0b DebugHarness`::__57-[ASDataController _allocateNodesFromElements:andLayout:]_block_invoke((null)=<unavailable>, i=0) at ASDataController.mm:230
    frame #53: 0x000000010c91159e DebugHarness`::___ZL15ASDispatchApplymPU28objcproto17OS_dispatch_queue8NSObjectmU13block_pointerFvmE_block_invoke((null)=<unavailable>) at ASDispatch.h:36
    frame #54: 0x0000000116c284a6 libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #55: 0x0000000116c5105c libdispatch.dylib`_dispatch_client_callout + 8
    frame #56: 0x0000000116c30f58 libdispatch.dylib`_dispatch_queue_override_invoke + 1716
    frame #57: 0x0000000116c32ec4 libdispatch.dylib`_dispatch_root_queue_drain + 634
    frame #58: 0x0000000116c32bef libdispatch.dylib`_dispatch_worker_thread3 + 123
    frame #59: 0x0000000116fe85a2 libsystem_pthread.dylib`_pthread_wqthread + 1299
    frame #60: 0x0000000116fe807d libsystem_pthread.dylib`start_wqthread + 13

  thread #8, queue = 'org.AsyncDisplayKit.ASDataController.editingTransactionQueue:0x60800010be20'
    frame #0: 0x0000000116fac386 libsystem_kernel.dylib`semaphore_wait_trap + 10
    frame #1: 0x0000000116c50413 libdispatch.dylib`_os_semaphore_wait + 16
    frame #2: 0x0000000116c36434 libdispatch.dylib`_dispatch_group_wait_slow + 151
    frame #3: 0x000000010c905596 DebugHarness`ASDispatchApply(iterationCount=3, queue=0x0000000116c7c3c0, threadCount=16, work=0x000000010c905630) block_pointer) at ASDispatch.h:40
    frame #4: 0x000000010c9050c2 DebugHarness`::-[ASDataController _allocateNodesFromElements:andLayout:](self=0x000060800010be20, _cmd="_allocateNodesFromElements:andLayout:", elements=3 elements, shouldLayout=YES) at ASDataController.mm:215
    frame #5: 0x000000010c90448d DebugHarness`::-[ASDataController batchAllocateNodesFromElements:andLayout:batchSize:batchCompletion:](self=0x000060800010be20, _cmd="batchAllocateNodesFromElements:andLayout:batchSize:batchCompletion:", elements=3 elements, shouldLayout=YES, batchSize=3, batchCompletionHandler=0x000000010c90b650) at ASDataController.mm:183
    frame #6: 0x000000010c90b505 DebugHarness`::__40-[ASDataController updateWithChangeSet:]_block_invoke.200((null)=<unavailable>) at ASDataController.mm:573
    frame #7: 0x0000000116c284a6 libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #8: 0x0000000116c5105c libdispatch.dylib`_dispatch_client_callout + 8
    frame #9: 0x0000000116c2fac0 libdispatch.dylib`_dispatch_queue_serial_drain + 590
    frame #10: 0x0000000116c30669 libdispatch.dylib`_dispatch_queue_invoke + 1084
    frame #11: 0x0000000116c30b32 libdispatch.dylib`_dispatch_queue_override_invoke + 654
    frame #12: 0x0000000116c32ec4 libdispatch.dylib`_dispatch_root_queue_drain + 634
    frame #13: 0x0000000116c32bef libdispatch.dylib`_dispatch_worker_thread3 + 123
    frame #14: 0x0000000116fe85a2 libsystem_pthread.dylib`_pthread_wqthread + 1299
    frame #15: 0x0000000116fe807d libsystem_pthread.dylib`start_wqthread + 13

  thread #9
    frame #0: 0x0000000116fb444e libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x0000000116fe8621 libsystem_pthread.dylib`_pthread_wqthread + 1426
    frame #2: 0x0000000116fe807d libsystem_pthread.dylib`start_wqthread + 13

  thread #10, queue = 'com.apple.root.default-qos'
    frame #0: 0x0000000116fb3c22 libsystem_kernel.dylib`__psynch_mutexwait + 10
    frame #1: 0x0000000116fe8dfa libsystem_pthread.dylib`_pthread_mutex_lock_wait + 100
    frame #2: 0x0000000116fe6519 libsystem_pthread.dylib`_pthread_mutex_lock_slow + 285
    frame #3: 0x000000010c7d7fb3 DebugHarness`ASDN::Mutex::lock(this=0x00007fafd3853208) at ASThread.h:217
    frame #4: 0x000000010c8145e8 DebugHarness`::-[ASDisplayNode(self=0x00007fafd3853200, _cmd="setPrimitiveTraitCollection:", traitCollection=ASPrimitiveTraitCollection @ 0x000070000c94f300) setPrimitiveTraitCollection:](ASPrimitiveTraitCollection) at ASDisplayNode+Layout.mm:107
    frame #5: 0x000000010c92f565 DebugHarness`::ASTraitCollectionPropagateDown(element=0x00007fafd3853200, traitCollection=ASPrimitiveTraitCollection @ 0x000070000c94f550) at ASTraitCollection.m:27
    frame #6: 0x000000010c92f765 DebugHarness`::ASTraitCollectionPropagateDown(element=0x00006180001c99c0, traitCollection=ASPrimitiveTraitCollection @ 0x000070000c94f7a0) at ASTraitCollection.m:31
    frame #7: 0x000000010c8312ba DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd5832a00, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = +Inf))) at ASDisplayNode.mm:1018
    frame #8: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd5832a00, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = +Inf)), size=ASLayoutElementSize @ 0x000070000c94fe40, parentSize=(width = NaN, height = NaN)) at ASDisplayNode.mm:949
    frame #9: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd5832a00, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = +Inf)), parentSize=(width = NaN, height = NaN)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #10: 0x000000010c9eb7ab DebugHarness`crossChildLayout(child=0x00006100001c9a38, style=0x000070000c950d60, stackMin=0, stackMax=+Inf, crossMin=0, crossMax=343, parentSize=(width = NaN, height = NaN)) at ASStackUnpositionedLayout.mm:73
    frame #11: 0x000000010c9eb571 DebugHarness`::___ZL43layoutItemsAlongUnconstrainedStackDimensionRNSt3__16vectorI21ASStackLayoutSpecItemNS_9allocatorIS1_EEEERK22ASStackLayoutSpecStylebRK11ASSizeRange6CGSizeb_block_invoke((null)=<unavailable>, i=1) at ASStackUnpositionedLayout.mm:689
    frame #12: 0x000000010c9eb243 DebugHarness`dispatchApplyIfNeeded(iterationCount=2, forced=NO, work=0x000000010c9eb330) block_pointer) at ASStackUnpositionedLayout.mm:92
    frame #13: 0x000000010c9e7a55 DebugHarness`layoutItemsAlongUnconstrainedStackDimension(items=size=2, style=0x000070000c950d60, concurrent=NO, sizeRange=0x000070000c950df0, parentSize=(width = NaN, height = NaN), useOptimizedFlexing=NO) at ASStackUnpositionedLayout.mm:684
    frame #14: 0x000000010c9e6b2c DebugHarness`ASStackUnpositionedLayout::compute(children=size=2, style=0x000070000c950d60, sizeRange=0x000070000c950df0, concurrent=NO) at ASStackUnpositionedLayout.mm:726
    frame #15: 0x000000010c992e18 DebugHarness`::-[ASStackLayoutSpec calculateLayoutThatFits:](self=0x00006080001c9060, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) at ASStackLayoutSpec.mm:146
    frame #16: 0x000000010c9836a9 DebugHarness`::-[ASLayoutSpec calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00006080001c9060, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c950fd0, parentSize=(width = 343, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #17: 0x000000010c98341e DebugHarness`::-[ASLayoutSpec layoutThatFits:parentSize:](self=0x00006080001c9060, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), parentSize=(width = 343, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #18: 0x000000010c9831b4 DebugHarness`::-[ASLayoutSpec layoutThatFits:](self=0x00006080001c9060, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) at ASLayoutSpec.mm:93
    frame #19: 0x000000010c8313da DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd4a0f270, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) at ASDisplayNode.mm:1029
    frame #20: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd4a0f270, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c951870, parentSize=(width = 343, height = 1.7976931348623157E+308)) at ASDisplayNode.mm:949
    frame #21: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd4a0f270, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308)), parentSize=(width = 343, height = 1.7976931348623157E+308)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #22: 0x000000010c812ff4 DebugHarness`::-[ASDisplayNode(self=0x00007fafd4a0f270, _cmd="measureWithSizeRange:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) measureWithSizeRange:](ASSizeRange) at ASDisplayNode+Layout.mm:60
    frame #23: 0x000000010c812f2a DebugHarness`::-[ASDisplayNode(self=0x00007fafd4a0f270, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 343, height = 1.7976931348623157E+308))) layoutThatFits:](ASSizeRange) at ASDisplayNode+Layout.mm:54
    frame #24: 0x000000010c997af9 DebugHarness`::ASLayoutElementYogaMeasureFunc(yogaNode=0x00007fafd5832400, width=343, widthMode=YGMeasureModeAtMost, height=NaN, heightMode=YGMeasureModeUndefined) at ASYogaUtilities.mm:144
    frame #25: 0x000000010cb4fe0d DebugHarness`YGNodeWithMeasureFuncSetMeasuredDimensions(node=0x00007fafd5832400, availableWidth=359, availableHeight=NaN, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN) at Yoga.c:1729
    frame #26: 0x000000010cb4a1e8 DebugHarness`YGNodelayoutImpl(node=0x00007fafd5832400, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, config=0x000000010d916008) at Yoga.c:1978
    frame #27: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd5832400, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, reason="measure", config=0x000000010d916008) at Yoga.c:3287
    frame #28: 0x000000010cb50e78 DebugHarness`YGNodeComputeFlexBasisForChild(node=0x00007fafd5831e00, child=0x00007fafd5832400, width=359, widthMode=YGMeasureModeAtMost, height=NaN, parentWidth=359, parentHeight=NaN, heightMode=YGMeasureModeUndefined, direction=YGDirectionLTR, config=0x000000010d916008) at Yoga.c:1531
    frame #29: 0x000000010cb4aa2a DebugHarness`YGNodelayoutImpl(node=0x00007fafd5831e00, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, config=0x000000010d916008) at Yoga.c:2138
    frame #30: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd5831e00, availableWidth=359, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=359, parentHeight=NaN, performLayout=false, reason="measure", config=0x000000010d916008) at Yoga.c:3287
    frame #31: 0x000000010cb50e78 DebugHarness`YGNodeComputeFlexBasisForChild(node=0x00007fafd5068400, child=0x00007fafd5831e00, width=359, widthMode=YGMeasureModeAtMost, height=NaN, parentWidth=359, parentHeight=NaN, heightMode=YGMeasureModeUndefined, direction=YGDirectionLTR, config=0x000000010d916008) at Yoga.c:1531
    frame #32: 0x000000010cb4aa2a DebugHarness`YGNodelayoutImpl(node=0x00007fafd5068400, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=false, config=0x000000010d916008) at Yoga.c:2138
    frame #33: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd5068400, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionLTR, widthMeasureMode=YGMeasureModeAtMost, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=false, reason="measure", config=0x000000010d916008) at Yoga.c:3287
    frame #34: 0x000000010cb50e78 DebugHarness`YGNodeComputeFlexBasisForChild(node=0x00007fafd384ac00, child=0x00007fafd5068400, width=375, widthMode=YGMeasureModeExactly, height=NaN, parentWidth=375, parentHeight=NaN, heightMode=YGMeasureModeUndefined, direction=YGDirectionLTR, config=0x000000010d916008) at Yoga.c:1531
    frame #35: 0x000000010cb4aa2a DebugHarness`YGNodelayoutImpl(node=0x00007fafd384ac00, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionInherit, widthMeasureMode=YGMeasureModeExactly, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=true, config=0x000000010d916008) at Yoga.c:2138
    frame #36: 0x000000010cb49a66 DebugHarness`YGLayoutNodeInternal(node=0x00007fafd384ac00, availableWidth=375, availableHeight=NaN, parentDirection=YGDirectionInherit, widthMeasureMode=YGMeasureModeExactly, heightMeasureMode=YGMeasureModeUndefined, parentWidth=375, parentHeight=NaN, performLayout=true, reason="initial", config=0x000000010d916008) at Yoga.c:3287
    frame #37: 0x000000010cb4dc67 DebugHarness`YGNodeCalculateLayout(node=0x00007fafd384ac00, parentWidth=375, parentHeight=NaN, parentDirection=YGDirectionInherit) at Yoga.c:3466
    frame #38: 0x000000010c824a0c DebugHarness`::-[ASDisplayNode(self=0x00007fafd2713fc0, _cmd="calculateLayoutFromYogaRoot:", rootConstrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) calculateLayoutFromYogaRoot:](ASSizeRange) at ASDisplayNode+Yoga.mm:259
    frame #39: 0x000000010c830882 DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd2713fc0, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASDisplayNode.mm:971
    frame #40: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd2713fc0, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c954060, parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASDisplayNode.mm:949
    frame #41: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd2713fc0, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), parentSize=(width = 375, height = 1.7976931348623157E+308)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #42: 0x000000010c986215 DebugHarness`::-[ASWrapperLayoutSpec calculateLayoutThatFits:](self=0x0000600000132980, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASLayoutSpec.mm:275
    frame #43: 0x000000010c9836a9 DebugHarness`::-[ASLayoutSpec calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x0000600000132980, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c954ae0, parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #44: 0x000000010c98341e DebugHarness`::-[ASLayoutSpec layoutThatFits:parentSize:](self=0x0000600000132980, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASLayoutSpec.mm:93
    frame #45: 0x000000010c9831b4 DebugHarness`::-[ASLayoutSpec layoutThatFits:](self=0x0000600000132980, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASLayoutSpec.mm:93
    frame #46: 0x000000010c8313da DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:](self=0x00007fafd4902180, _cmd="calculateLayoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASDisplayNode.mm:1029
    frame #47: 0x000000010c83004d DebugHarness`::-[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:](self=0x00007fafd4902180, _cmd="calculateLayoutThatFits:restrictedToSize:relativeToParentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), size=ASLayoutElementSize @ 0x000070000c955380, parentSize=(width = 375, height = 1.7976931348623157E+308)) at ASDisplayNode.mm:949
    frame #48: 0x000000010c8139d6 DebugHarness`::-[ASDisplayNode(self=0x00007fafd4902180, _cmd="layoutThatFits:parentSize:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308)), parentSize=(width = 375, height = 1.7976931348623157E+308)) layoutThatFits:parentSize:](ASSizeRange, CGSize) at ASDisplayNode+Layout.mm:84
    frame #49: 0x000000010c812ff4 DebugHarness`::-[ASDisplayNode(self=0x00007fafd4902180, _cmd="measureWithSizeRange:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) measureWithSizeRange:](ASSizeRange) at ASDisplayNode+Layout.mm:60
    frame #50: 0x000000010c812f2a DebugHarness`::-[ASDisplayNode(self=0x00007fafd4902180, _cmd="layoutThatFits:", constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) layoutThatFits:](ASSizeRange) at ASDisplayNode+Layout.mm:54
    frame #51: 0x000000010c9049b0 DebugHarness`::-[ASDataController _layoutNode:withConstrainedSize:](self=0x000060800010be20, _cmd="_layoutNode:withConstrainedSize:", node=0x00007fafd4902180, constrainedSize=(min = (width = 0, height = 0), max = (width = 375, height = 1.7976931348623157E+308))) at ASDataController.mm:198
    frame #52: 0x000000010c905b0b DebugHarness`::__57-[ASDataController _allocateNodesFromElements:andLayout:]_block_invoke((null)=<unavailable>, i=1) at ASDataController.mm:230
    frame #53: 0x000000010c91159e DebugHarness`::___ZL15ASDispatchApplymPU28objcproto17OS_dispatch_queue8NSObjectmU13block_pointerFvmE_block_invoke((null)=<unavailable>) at ASDispatch.h:36
    frame #54: 0x0000000116c284a6 libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #55: 0x0000000116c5105c libdispatch.dylib`_dispatch_client_callout + 8
    frame #56: 0x0000000116c30f58 libdispatch.dylib`_dispatch_queue_override_invoke + 1716
    frame #57: 0x0000000116c32ec4 libdispatch.dylib`_dispatch_root_queue_drain + 634
    frame #58: 0x0000000116c32bef libdispatch.dylib`_dispatch_worker_thread3 + 123
    frame #59: 0x0000000116fe85a2 libsystem_pthread.dylib`_pthread_wqthread + 1299
    frame #60: 0x0000000116fe807d libsystem_pthread.dylib`start_wqthread + 13

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions