Bug 160143

Summary: [GTK][Threaded Compositor] ASSERTION FAILED: !!handle ^ !!m_nativeSurfaceHandle with several layout tests
Product: WebKit Reporter: Carlos Garcia Campos <cgarcia>
Component: WebKitGTKAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: bugs-noreply
Priority: P2 Keywords: Gtk
Version: WebKit Local Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 154066    
Attachments:
Description Flags
Patch mcatanzaro: review+

Carlos Garcia Campos
Reported 2016-07-24 08:14:24 PDT
This is tricky. We have a message to set the native surface handle and another one for destroying it, the former is a normal message while the latter is sync. This assertion happens if the web view is realized before the web process is launched. This is the sequence: 1.- DrawingAreaProxyImpl sends SetNativeSurfaceHandleForCompositing message to the web process, since the process hasn't been launched yet, the message is queued. 2.- Web process is launched and queued messages and now sent to the web process 3.- The page is closed right after the web process is launched, and DrawingAreaProxyImpl sends DestroyNativeSurfaceHandleForCompositing to the web process 4.- The web process processes incoming messages, and DestroyNativeSurfaceHandleForCompositing is processed first because it's sync 5.- The web process processes SetNativeSurfaceHandleForCompositing message This is not only producing the assertion, it's also setting a handle for a X window already destroyed in the UI process, so this could be producing the X errors we hace seen in other tests. So, we need to make sure SetNativeSurfaceHandleForCompositing and DestroyNativeSurfaceHandleForCompositing are handled in order by the web process. We could make SetNativeSurfaceHandleForCompositing sync as well, but sync messages are just ignored when sent before the web process has been launched (only normal messages are queued for obvious reasons). The other option is to sending the SetNativeSurfaceHandleForCompositing message with the IPC::DispatchMessageEvenWhenWaitingForSyncReply flag. In this case the message is queued and dispatched on process launch, but it's dispatched before other messages also queued but without that flag set, like CreateWebPage. Since there's no WebPage there's the web process doesn't find a valid message receiver for it and it's discarded. We need to ensure there DrawinArea object has been created before sending the SetNativeSurfaceHandleForCompositing with the PC::DispatchMessageEvenWhenWaitingForSyncReply flag. STDERR: ASSERTION FAILED: !!handle ^ !!m_nativeSurfaceHandle STDERR: ../../Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp(75) : WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing(uint64_t)::<lambda()> STDERR: 1 0x7f5b958c2aef /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(WTFCrash+0x1e) [0x7f5b958c2aef] STDERR: 2 0x7f5b9c3a1f72 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0x583ff72) [0x7f5b9c3a1f72] STDERR: 3 0x7f5b9c3a8a02 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0x5846a02) [0x7f5b9c3a8a02] STDERR: 4 0x7f5b9bd96fed /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::Function<void ()>::operator()() const+0x37) [0x7f5b9bd96fed] STDERR: 5 0x7f5b9c3a0613 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0x583e613) [0x7f5b9c3a0613] STDERR: 6 0x7f5b9c3a100a /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0x583f00a) [0x7f5b9c3a100a] STDERR: 7 0x7f5b9bd96fed /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::Function<void ()>::operator()() const+0x37) [0x7f5b9bd96fed] STDERR: 8 0x7f5b958de3ba /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(WTF::RunLoop::performWork()+0xce) [0x7f5b958de3ba] STDERR: 9 0x7f5b959211f4 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(+0x22641f4) [0x7f5b959211f4] STDERR: 10 0x7f5b95921219 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(+0x2264219) [0x7f5b95921219] STDERR: 11 0x7f5b95921194 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(+0x2264194) [0x7f5b95921194] STDERR: 12 0x7f5b959211c3 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(+0x22641c3) [0x7f5b959211c3] STDERR: 13 0x7f5b913a2a26 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/DependenciesGTK/Root/lib/libglib-2.0.so.0(+0x53a26) [0x7f5b913a2a26] STDERR: 14 0x7f5b913a3854 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/DependenciesGTK/Root/lib/libglib-2.0.so.0(g_main_context_dispatch+0x33) [0x7f5b913a3854] STDERR: 15 0x7f5b913a3a39 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/DependenciesGTK/Root/lib/libglib-2.0.so.0(+0x54a39) [0x7f5b913a3a39] STDERR: 16 0x7f5b913a3e60 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/DependenciesGTK/Root/lib/libglib-2.0.so.0(g_main_loop_run+0x1d7) [0x7f5b913a3e60] STDERR: 17 0x7f5b95921794 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(WTF::RunLoop::run()+0xac) [0x7f5b95921794] STDERR: 18 0x7f5b9c3a08b7 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebKit::CompositingRunLoop::run()+0x11) [0x7f5b9c3a08b7] STDERR: 19 0x7f5b9c3a33f0 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebKit::ThreadedCompositor::runCompositingThread()+0x128) [0x7f5b9c3a33f0] STDERR: 20 0x7f5b9c3a31dd /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0x58411dd) [0x7f5b9c3a31dd] STDERR: 21 0x7f5b9c3a5b09 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0x5843b09) [0x7f5b9c3a5b09] STDERR: 22 0x7f5b9bddb782 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(std::function<void ()>::operator()() const+0x32) [0x7f5b9bddb782] STDERR: 23 0x7f5b958dfbec /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(+0x2222bec) [0x7f5b958dfbec] STDERR: 24 0x7f5b9591b28d /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(+0x225e28d) [0x7f5b9591b28d] STDERR: 25 0x7f5b92fc80a4 /lib/x86_64-linux-gnu/libpthread.so.0(+0x80a4) [0x7f5b92fc80a4] STDERR: 26 0x7f5b8e2d087d /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f5b8e2d087d]
Attachments
Patch (6.01 KB, patch)
2016-07-24 08:28 PDT, Carlos Garcia Campos
mcatanzaro: review+
Carlos Garcia Campos
Comment 1 2016-07-24 08:28:14 PDT
Carlos Garcia Campos
Comment 2 2016-07-24 23:34:56 PDT
Note You need to log in before you can comment on or make changes to this bug.