MapKit: It's not safe to call MKMapView's addOverlay on a non-main-queue, even if it is executed on the main thread

Originator:dieter.komendera
Number:rdar://24025596 Date Originated:30-Dec-2015 02:15 PM
Status:Open Resolved:
Product:iOS SDK Product Version:9.2
Classification:Serious Bug Reproducible:Always
 
Summary:
This crashes with EXC_BAD_ACCESS:

	let myqueue = dispatch_queue_create("myqueue", dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_DEFAULT, 0))
	dispatch_sync(myqueue) {
	if NSThread.isMainThread() {
		mapView.addOverlay(polyline, level: .AboveRoads)
	} else {
		dispatch_async(dispatch_get_main_queue()) {
			mapView.addOverlay(polyline, level: .AboveRoads)
		}
	}
	
I’m attaching an iOS playground which demonstrates the issue.

Is this expected behavior? My understanding was, as long as UI related code is executed on the main thread, it is safe. This case lets me assume this is not always the case.

Notes:
See https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2635 on why this might be a problem

Crash:

Crashed Thread:        0  Dispatch queue: myqueue

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Thread 0 Crashed:: Dispatch queue: myqueue
0   libdispatch.dylib             	0x0000000108256906 dispatch_retain + 0
1   com.apple.VectorKit           	0x000000010b029353 -[VKRasterOverlayTileSource init] + 163
2   com.apple.VectorKit           	0x000000010ac51451 -[VKMapModel _rasterOverlayTileSourceForLevel:] + 289
3   com.apple.VectorKit           	0x000000010ac51bd4 -[VKMapModel addRasterOverlay:] + 52
4   com.apple.MapKit              	0x0000000105fd532f -[MKOverlayContainerView _insertDrawable:forOverlay:atIndex:level:] + 1365
5   com.apple.MapKit              	0x0000000105fd31a5 -[MKOverlayContainerView _configureAndAddDrawable:forOverlay:level:] + 401
6   com.apple.MapKit              	0x0000000105fd338e -[MKOverlayContainerView _considerAddingDrawable:inAddRect:level:] + 461
7   com.apple.MapKit              	0x0000000105fd3b6d -[MKOverlayContainerView addOverlay:level:] + 198
8   com.apple.MapKit              	0x0000000105fc6c94 -[MKMapView(OverlaysAPI) addOverlay:level:] + 85

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!