WebLayer's -display looks like: - (void)display { #if PLATFORM(IOS) if (pthread_main_np()) WebThreadLock(); #endif and this is necessary since this as a place where CA calls back into WebKit. This lock is missing in the WebGL -display implementation.