Can anybody help me to interpret the following crash log from the iOS-Simulator?
* thread #32, queue = 'com.apple.mapdisplay.dispatch.overlaytiledecodequeue', stop reason = signal SIGABRT
* frame #0: 0x00007fff523bc7fa libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x00007fff52466bc1 libsystem_pthread.dylib`pthread_kill + 432
frame #2: 0x00007fff5234ba5c libsystem_c.dylib`abort + 120
frame #3: 0x00007fff3b7b4f4b MTLSimDriver`sendXPCMessageWithReplySync(NSObject<OS_xpc_object>*, NSObject<OS_xpc_object>*) (.cold.1) + 75
frame #4: 0x00007fff3b79ce3a MTLSimDriver`sendXPCMessageWithReplySync(NSObject<OS_xpc_object>*, NSObject<OS_xpc_object>*) + 186
frame #5: 0x00007fff3b791b15 MTLSimDriver`dispatchOperationWihReply(NSObject<OS_xpc_object>*, NSObject<OS_dispatch_data>*, unsigned long long, void (NSObject<OS_xpc_object>*) block_pointer, void (void const*, unsigned long) block_pointer) + 134
frame #6: 0x00007fff3b7a8afc MTLSimDriver`-[MTLSimTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:] + 564
frame #7: 0x00007fff3c7ed759 MetalTools`-[MTLDebugTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:] + 258
frame #8: 0x00007fff494e52be VectorKit`ggl::MetalResourceManager::upload(ggl::Texture2DLoadItem const&, std::__1::shared_ptr<ggl::RenderTransaction> const&) + 778
frame #9: 0x00007fff494d5124 VectorKit`ggl::MetalResourceAccessor::load(ggl::Texture2DLoadItem&) + 34
frame #10: 0x00007fff49302b9f VectorKit`std::__1::__function::__func<generateTexture(std::__1::shared_ptr<ggl::TextureData2D> const&, VKSharedResources const*)::$_3, std::__1::allocator<generateTexture(std::__1::shared_ptr<ggl::TextureData2D> const&, VKSharedResources const*)::$_3>, void (ggl::ResourceAccessor*)>::operator()(ggl::ResourceAccessor*&&) + 59
frame #11: 0x00007fff494f5f7b VectorKit`ggl::MetalLoader::performWithAccessor(std::__1::function<void (ggl::ResourceAccessor*)> const&, std::__1::shared_ptr<ggl::RenderTransaction> const&) + 35
frame #12: 0x00007fff49300d0a VectorKit`_processOverlays(geo::MercatorTile const&, unsigned int, float, VKSharedResources const*, ggl::Loader&, std::__1::vector<geo::_retain_ptr<VKOverlay*, geo::_retain_objc, geo::_release_objc, geo::_hash_objc, geo::_equal_objc>, std::__1::allocator<geo::_retain_ptr<VKOverlay*, geo::_retain_objc, geo::_release_objc, geo::_hash_objc, geo::_equal_objc> > > const&, std::__1::vector<md::OverlayTileData::OverlayTileResource, std::__1::allocator<md::OverlayTileData::OverlayTileResource> >&, std::__1::shared_ptr<ggl::ConstantDataTyped<ggl::Tile::View> >) + 7825
frame #13: 0x00007fff492fece7 VectorKit`md::OverlayLayerDataSource::createLayerData(mdc::LayerDataRequestKey const&, geo::linear_map<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > >, std::__1::equal_to<unsigned short>, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > >, std::__1::vector<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > >, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > > > > const&, long long) const + 423
frame #14: 0x00007fff49560558 VectorKit`mdc::LayerDataSource::updateLayerData(unsigned long, mdc::LayerDataRequestKey const&, geo::linear_map<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > >, std::__1::equal_to<unsigned short>, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > >, std::__1::vector<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > >, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > > > > const&, long long) + 64
frame #15: 0x00007fff49564363 VectorKit`std::__1::__function::__func<mdc::LayerDataSource::processLayerDataRequests(mdc::ResourceManager*, geo::TaskGroup*, long long)::$_5, std::__1::allocator<mdc::LayerDataSource::processLayerDataRequests(mdc::ResourceManager*, geo::TaskGroup*, long long)::$_5>, void ()>::operator()() + 155
frame #16: 0x00007fff494d18d8 VectorKit`___ZN3geo9TaskQueue14queueAsyncTaskENSt3__110shared_ptrINS_4TaskEEEPU28objcproto17OS_dispatch_group8NSObject_block_invoke + 66
frame #17: 0x000000010cfb8dd4 libdispatch.dylib`_dispatch_call_block_and_release + 12
frame #18: 0x000000010cfb9d48 libdispatch.dylib`_dispatch_client_callout + 8
frame #19: 0x000000010cfc05ef libdispatch.dylib`_dispatch_lane_serial_drain + 788
frame #20: 0x000000010cfc11b5 libdispatch.dylib`_dispatch_lane_invoke + 476
frame #21: 0x000000010cfcca4e libdispatch.dylib`_dispatch_workloop_worker_thread + 719
frame #22: 0x00007fff524636fc libsystem_pthread.dylib`_pthread_wqthread + 290
frame #23: 0x00007fff52462827 libsystem_pthread.dylib`start_wqthread + 15
I am trying to draw an overly onto a MKMapView in realtime using MKOverlayPathRenderer. The gesture recognizers for drawing will update the UIBezierpath of the overlay and then call the renderers invalidatePath method. The renderers createPath method will then create the path with
self.path = [self.overlay.path CGPath];
Here, the (atomic) self.overlay.path property is a subclass of UIBezierpath which I made in an attempt for thread safety. It simply encapsulates all of the relevant UIBezierpath methods into @synchronized blocks:
-(void)moveToPoint:(CGPoint)point {
@synchronized (self) {
[super moveToPoint:point];
}
}
same for all the other UIBezierpath methods I use. Most of the time, everything works fine with this subclass, but sometimes it will still crash with the above crash log. Does anybody have an idea how to fix this problem?