Summary: | void ThreadTimers::sharedTimerFiredInternal() is not thread safe.... | ||
---|---|---|---|
Product: | WebKit | Reporter: | milarson |
Component: | WebCore JavaScript | Assignee: | Nobody <webkit-unassigned> |
Status: | RESOLVED INVALID | ||
Severity: | Major | CC: | ap, ddkilzer, simon.fraser, thorton |
Priority: | P2 | ||
Version: | WebKit Nightly Build | ||
Hardware: | Mac | ||
OS: | macOS 10.12 |
Description
milarson
2016-11-04 18:15:41 PDT
There is no need for synchronization in this class, each instance is only used from one thread. Please see this comment in ThreadTimers.cpp: // Timers are created, started and fired on the same thread, and each thread has its own ThreadTimers // copy to keep the heap and a set of currently firing timers. For Apple employees, this appears to be about rdar://28248383 Yes that is the radar, we are seeing a double release coming up from webkit, but its now more likely from QuartzCore over releasing a metal context ==> 50 GeForceMTLDriver: -[NVMTLRenderPipelineState dealloc] <== 50 QuartzCore: CA::OGL::metal_delete_state(CA::OGL::MetalPipeState*, CA::OGL::MetalPipeState*, void*) 50 QuartzCore: x_hash_table_foreach 50 QuartzCore: CA::OGL::MetalContext::purge_shaders() 50 QuartzCore: CA::OGL::MetalContext::purge(bool) 50 QuartzCore: CA::CG::Renderer::invalidate_context() 50 QuartzCore: CA::CG::IOSurfaceRenderer::~IOSurfaceRenderer() 50 QuartzCore: CA::CG::IOSurfaceRenderer::~IOSurfaceRenderer() 50 QuartzCore: CA::CG::IOSurfaceRenderer::will_suspend_callback(void*) 50 libdispatch.dylib: _dispatch_client_callout 50 libdispatch.dylib: _dispatch_barrier_sync_f_invoke 34 QuartzCore: CA::Render::post_notification(CA::Render::NotificationName, CA::Render::Object*, void*, bool) | 34 QuartzCore: CABackingStoreCollectBlocking | 34 WebCore: WebCore::ThreadTimers::sharedTimerFiredInternal() | 34 WebCore: WebCore::timerFired(__CFRunLoopTimer*, void*) | 34 CoreFoundation: __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ |