Bug 168699

Summary: [GTK] Hangs when showing Google search results
Product: WebKit Reporter: Bastien Nocera <bugzilla>
Component: WebKitGTKAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: achristensen, andersca, bugs-noreply, cgarcia, commit-queue, Hironori.Fujii, mcatanzaro
Priority: P2    
Version: Other   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch
none
Updated patch zan: review+

Description Bastien Nocera 2017-02-21 18:13:42 PST
I see this every 3 or 4 times I show a Google search results page.

epiphany-3.23.90-1.fc26.x86_64
webkitgtk4-2.15.4-4.fc26.x86_64

The only 2 threads that aren't in poll:
Thread 2 (Thread 0x7f52183c5700 (LWP 13972)):
#0  0x00007f52250d4a2b in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x7f522873a4b0 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3120>)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f52250d4a2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x560f78535ae0, cond=0x7f522873a488 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3080>) at pthread_cond_wait.c:502
#2  0x00007f52250d4a2b in __pthread_cond_wait (cond=0x7f522873a488 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3080>, mutex=0x560f78535ae0) at pthread_cond_wait.c:655
#3  0x00007f521f1c97bc in std::condition_variable::wait(std::unique_lock<std::mutex>&) () at /lib64/libstdc++.so.6
#4  0x00007f5228537aa7 in std::_V2::condition_variable_any::wait<std::unique_lock<bmalloc::Mutex> >(std::unique_lock<bmalloc::Mutex>&) (__lock=<synthetic pointer>..., this=<optimized out>)
    at /usr/include/c++/7/condition_variable:251
#5  0x00007f5228537aa7 in std::_V2::condition_variable_any::wait<std::unique_lock<bmalloc::Mutex>, bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop()::{lambda()#1}>(std::unique_lock<bmalloc::Mutex>&, bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop()::{lambda()#1}) (__p=..., __lock=..., this=<optimized out>) at /usr/include/c++/7/condition_variable:260
#6  0x00007f5228537aa7 in bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop() (this=0x7f522873a480 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3072>)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:130
#7  0x00007f5228537be9 in bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadEntryPoint(bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>*) (asyncTask=<optimized out>)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:110
#8  0x00007f521f1cfaaf in  () at /lib64/libstdc++.so.6
#9  0x00007f52250ce5bd in start_thread (arg=0x7f52183c5700) at pthread_create.c:456
#10 0x00007f521e927c3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 1 (Thread 0x7f522ce00f80 (LWP 13959)):
#0  0x00007f52250d4a2b in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x7f522cc9e558 <IPC::Connection::SyncMessageState::singleton()::syncMessageState+88>)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f52250d4a2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x7f522cc9e508 <IPC::Connection::SyncMessageState::singleton()::syncMessageState+8>, cond=0x7f522cc9e530 <IPC::Connection::SyncMessageState::singleton()::syncMessageState+48>) at pthread_cond_wait.c:502
#2  0x00007f52250d4a2b in __pthread_cond_wait (cond=cond@entry=0x7f522cc9e530 <IPC::Connection::SyncMessageState::singleton()::syncMessageState+48>, mutex=mutex@entry=0x7f522cc9e508 <IPC::Connection::SyncMessageState::singleton()::syncMessageState+8>) at pthread_cond_wait.c:655
#3  0x00007f5228530085 in WTF::ThreadCondition::wait(WTF::Mutex&) (this=this@entry=0x7f522cc9e530 <IPC::Connection::SyncMessageState::singleton()::syncMessageState+48>, mutex=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:365
#4  0x00007f522853013b in WTF::ThreadCondition::timedWait(WTF::Mutex&, double) (this=this@entry=0x7f522cc9e530 <IPC::Connection::SyncMessageState::singleton()::syncMessageState+48>, mutex=..., absoluteTime=inf)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:375
#5  0x00007f522c27f024 in WTF::BinarySemaphore::wait(WTF::TimeWithDynamicClockType) (this=0x7f522cc9e500 <IPC::Connection::SyncMessageState::singleton()::syncMessageState>, absoluteTime=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/threads/BinarySemaphore.cpp:54
#6  0x00007f522aa2273e in IPC::Connection::SyncMessageState::wait(WTF::TimeWithDynamicClockType) (absoluteTime=..., this=<optimized out>)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:82
#7  0x00007f522aa2273e in IPC::Connection::waitForSyncReply(unsigned long, WTF::Seconds, WTF::OptionSet<IPC::SendSyncOption>) (this=this@entry=0x7f52179ec180, syncRequestID=syncRequestID@entry=57, timeout=..., 
    timeout@entry=..., sendSyncOptions=...) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:586
#8  0x00007f522aa22c09 in IPC::Connection::sendSyncMessage(unsigned long, std::unique_ptr<IPC::Encoder, std::default_delete<IPC::Encoder> >, WTF::Seconds, WTF::OptionSet<IPC::SendSyncOption>) (this=this@entry=0x7f52179ec180, syncRequestID=57, encoder=std::unique_ptr<IPC::Encoder> containing 0x0, timeout=..., timeout@entry=..., sendSyncOptions=..., sendSyncOptions@entry=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:528
#9  0x00007f522abb37b7 in IPC::Connection::sendSync<Messages::StorageManager::GetValues>(Messages::StorageManager::GetValues&&, Messages::StorageManager::GetValues::Reply&&, unsigned long, WTF::Seconds, WTF::OptionSet<IPC::SendSyncOption>) (sendSyncOptions=..., timeout=..., destinationID=0, reply=<optimized out>, message=<optimized out>, this=0x7f52179ec180)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.h:391
#10 0x00007f522abb37b7 in WebKit::StorageAreaMap::loadValuesIfNeeded() (this=0x7f52178b8380) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp:189
#11 0x00007f522abb3dcb in WebKit::StorageAreaMap::setItem(WebCore::Frame*, WebKit::StorageAreaImpl*, WTF::String const&, WTF::String const&, bool&) (this=0x7f52178b8380, sourceFrame=0x7f51835ad000, sourceArea=0x7f5164896e80, key=..., value=..., quotaException=@0x7ffe0dca0577: false) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp:120
#12 0x00007f522b9d19ea in WebCore::Storage::setItem(WTF::String const&, WTF::String const&) (this=this@entry=0x7f51382507e0, key=..., value=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/storage/Storage.cpp:102
#13 0x00007f522bed973c in WebCore::jsStoragePrototypeFunctionSetItemCaller (throwScope=..., castedThis=<optimized out>, state=0x7ffe0dca0640)
    at /usr/src/debug/webkitgtk-2.15.4/x86_64-redhat-linux-gnu/DerivedSources/WebCore/JSStorage.cpp:327
#14 0x00007f522bed973c in WebCore::BindingCaller<WebCore::JSStorage>::callOperation<WebCore::jsStoragePrototypeFunctionSetItemCaller> (operationName=0x7f522c2b66cc "setItem", state=0x7ffe0dca0640)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/bindings/js/JSDOMBindingCaller.h:71
#15 0x00007f522bed973c in WebCore::jsStoragePrototypeFunctionSetItem(JSC::ExecState*) (state=0x7ffe0dca0640) at /usr/src/debug/webkitgtk-2.15.4/x86_64-redhat-linux-gnu/DerivedSources/WebCore/JSStorage.cpp:313
#16 0x00007f51bbfff028 in  ()
#17 0x00007ffe0dca06c0 in  ()
#18 0x00007f52281780fb in llint_entry () at /lib64/libjavascriptcoregtk-4.0.so.18
Comment 1 Michael Catanzaro 2017-02-21 19:04:32 PST
We'd really need a backtrace with member variables to see what messages are being sent to do anything about this. Also please try again with 2.15.90 and let us know if it's still broken there.
Comment 2 Carlos Garcia Campos 2017-02-22 05:27:40 PST
No, I don't need a more details bt, it's easy to know that it's blocked in 

WebProcess::singleton().parentProcessConnection()->sendSync(Messages::StorageManager::GetValues(m_storageMapID, m_currentSeed), Messages::StorageManager::GetValues::Reply(values), 0);

What I need is a bt of the UI process too, to know why it's not responding to the sync message.
Comment 3 Bastien Nocera 2017-02-22 08:40:24 PST
Full bt:
Thread 18 (Thread 0x7f77dffff700 (LWP 3831)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7f77bc001370, timeout=<optimized out>, context=0x7f77bc000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77bc000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77bc001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77dfffeb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77dfffeb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f77f3108140) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9f60) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77dffff700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 17 (Thread 0x7f77c37fe700 (LWP 3747)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7f77b0001370, timeout=<optimized out>, context=0x7f77b0000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77b0000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77b0001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77c37fdb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77c37fdb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3910) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f98e0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77c37fe700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 16 (Thread 0x7f77dcfaa700 (LWP 3739)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7f77c8001370, timeout=<optimized out>, context=0x7f77c8000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77c8000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77c8001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77dcfa9b30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77dcfa9b30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3730) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9790) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77dcfaa700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 15 (Thread 0x7f77ddffb700 (LWP 3725)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7f77d0001370, timeout=<optimized out>, context=0x7f77d0000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77d0000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77d0001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77ddffab30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77ddffab30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3550) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9640) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77ddffb700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 14 (Thread 0x7f77de7fc700 (LWP 3724)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786ded7d6c in poll (__timeout=-1, __nfds=1, __fds=0x7f77de7fb7c0) at /usr/include/bits/poll2.h:46
#2  0x00007f786ded7d6c in IPC::Connection::sendOutgoingMessage(std::unique_ptr<IPC::Encoder, std::default_delete<IPC::Encoder> >) (this=this@entry=0x7f785d9ecc00, encoder=std::unique_ptr<IPC::Encoder> containing 0x7f77b516bc80) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:515
#3  0x00007f786dc8c00f in IPC::Connection::sendOutgoingMessages() (this=0x7f785d9ecc00) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:825
#4  0x00007f786b2a04be in WTF::Function<void ()>::operator()() const (this=<synthetic pointer>) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Function.h:50
#5  0x00007f786b2a04be in WTF::RunLoop::performWork() (this=0x7f77f3198168) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/RunLoop.cpp:105
#6  0x00007f786b2c8839 in WTF::RunLoop::<lambda(gpointer)>::operator() (__closure=0x0, userData=<optimized out>) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:66
#7  0x00007f786b2c8839 in WTF::RunLoop::<lambda(gpointer)>::_FUN(gpointer) () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:68
#8  0x00007f786a255127 in g_main_dispatch (context=0x7f77cc000900) at gmain.c:3203
#9  0x00007f786a255127 in g_main_context_dispatch (context=context@entry=0x7f77cc000900) at gmain.c:3856
#10 0x00007f786a2554c8 in g_main_context_iterate (context=0x7f77cc000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3929
#11 0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77cc001240) at gmain.c:4125
#12 0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#13 0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77de7fbb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#14 0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#15 0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77de7fbb30) at /usr/include/c++/7/bits/std_function.h:669
#16 0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3500) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#17 0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9540) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#18 0x00007f78694c75bd in start_thread (arg=0x7f77de7fc700) at pthread_create.c:456
#19 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 13 (Thread 0x7f77df7fe700 (LWP 3714)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7f77d4001370, timeout=<optimized out>, context=0x7f77d4000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77d4000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77d4001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77df7fdb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77df7fdb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f34b0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f93c0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77df7fe700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 12 (Thread 0x7f77f12ed700 (LWP 3710)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x7f77d8001370, timeout=<optimized out>, context=0x7f77d8000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77d8000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77d8001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77f12ecb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77f12ecb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3410) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9370) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77f12ed700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 11 (Thread 0x7f77f1aee700 (LWP 3709)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x7f77e4001370, timeout=<optimized out>, context=0x7f77e4000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77e4000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77e4001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77f1aedb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77f1aedb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f33c0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9350) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77f1aee700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 10 (Thread 0x7f77f22ef700 (LWP 3708)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x7f77e0001370, timeout=<optimized out>, context=0x7f77e0000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77e0000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77e0001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f77f22eeb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f77f22eeb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3370) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9320) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77f22ef700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 9 (Thread 0x7f77f3bff700 (LWP 3706)):
#0  0x00007f7869f465d9 in syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f786a29a76f in g_cond_wait (cond=cond@entry=0x56536d18b458, mutex=mutex@entry=0x56536d18b450) at gthread-posix.c:1395
#2  0x00007f786a229b8b in g_async_queue_pop_intern_unlocked (queue=queue@entry=0x56536d18b450, wait=wait@entry=1, end_time=end_time@entry=-1) at gasyncqueue.c:419
#3  0x00007f786a229fb7 in g_async_queue_pop (queue=0x56536d18b450) at gasyncqueue.c:453
#4  0x00007f7873bba0d1 in run_history_service_thread () at /usr/lib64/epiphany/libephymisc.so
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536d033990) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f77f3bff700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 8 (Thread 0x7f78013fe700 (LWP 3698)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7f77f8001370, timeout=<optimized out>, context=0x7f77f8000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77f8000900, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77f8001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::<lambda()>::operator() (__closure=0x7f78013fdb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler<void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f78013fdb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3230) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9060) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f78013fe700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 7 (Thread 0x7f78027ff700 (LWP 3696)):
#0  0x00007f78694cdfd6 in futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x7f78027fe7d0, expected=0, futex_word=0x7f785d95b3a0) at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1  0x00007f78694cdfd6 in __pthread_cond_wait_common (abstime=0x7f78027fe7d0, mutex=0x7f785d95b350, cond=0x7f785d95b378) at pthread_cond_wait.c:539
#2  0x00007f78694cdfd6 in __pthread_cond_timedwait (cond=0x7f785d95b378, mutex=0x7f785d95b350, abstime=0x7f78027fe7d0) at pthread_cond_wait.c:667
#3  0x00007f786b2c710a in WTF::ThreadCondition::timedWait(WTF::Mutex&, double) (this=this@entry=0x7f785d95b378, mutex=..., absoluteTime=1487774716.346159)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:386
#4  0x00007f786b29e23b in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) (address=address@entry=0x7f78027fe90f, validation=..., beforeSleep=..., timeout=...) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.cpp:597
#5  0x00007f786b29032d in WTF::ParkingLot::parkConditionally<bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#1}, bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#2}>(void const*, bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#1} const&, bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#2} const&, WTF::TimeWithDynamicClockType const&) (timeout=..., beforeSleep=..., validation=..., address=0x7f78027fe90f) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.h:85
#6  0x00007f786b29032d in WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) (timeout=..., lock=..., this=0x7f78027fe90f)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:77
#7  0x00007f786b29032d in WTF::ConditionBase::waitFor<WTF::Lock>(WTF::Lock&, WTF::Seconds) (relativeTimeout=..., lock=..., this=0x7f78027fe90f) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:117
#8  0x00007f786b29032d in WTF::sleep(double) (value=<optimized out>) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/CurrentTime.cpp:343
#9  0x00007f786df31f2d in WebKit::MemoryPressureMonitor::<lambda()>::operator() (__closure=<optimized out>) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/UIProcess/linux/MemoryPressureMonitor.cpp:254
#10 0x00007f786df31f2d in std::_Function_handler<void(), WebKit::MemoryPressureMonitor::MemoryPressureMonitor()::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
    at /usr/include/c++/7/bits/std_function.h:316
#11 0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f78027feb30) at /usr/include/c++/7/bits/std_function.h:669
#12 0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f31e0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#13 0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9040) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#14 0x00007f78694c75bd in start_thread (arg=0x7f78027ff700) at pthread_create.c:456
#15 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 6 (Thread 0x7f7803b4a700 (LWP 3693)):
#0  0x00007f78694cda2b in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x7f77f3db21c4) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f78694cda2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x7f77f3db2170, cond=0x7f77f3db2198) at pthread_cond_wait.c:502
#2  0x00007f78694cda2b in __pthread_cond_wait (cond=0x7f77f3db2198, mutex=0x7f77f3db2170) at pthread_cond_wait.c:655
#3  0x00007f786b2c713b in WTF::ThreadCondition::timedWait(WTF::Mutex&, double) (this=this@entry=0x7f77f3db2198, mutex=..., absoluteTime=inf)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:375
#4  0x00007f786b29e23b in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) (address=address@entry=0x7f785d9e8093, validation=..., beforeSleep=..., timeout=...) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.cpp:597
#5  0x00007f786e7a13a9 in WTF::ParkingLot::parkConditionally<bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#1}, bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#2}>(void const*, bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#1} const&, bool WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)::{lambda()#2} const&, WTF::TimeWithDynamicClockType const&) (timeout=..., beforeSleep=..., validation=..., address=0x7f785d9e8093) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.h:85
#6  0x00007f786e7a13a9 in WTF::ConditionBase::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) (timeout=..., lock=..., this=0x7f785d9e8093)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:77
#7  0x00007f786e7a13a9 in WTF::ConditionBase::wait<WTF::Lock>(WTF::Lock&) (lock=..., this=0x7f785d9e8093) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:123
#8  0x00007f786e7a13a9 in WebCore::IconDatabase::syncThreadMainLoop() (this=this@entry=0x7f785d9e8000) at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/loader/icon/IconDatabase.cpp:1426
#9  0x00007f786e7a2d48 in WebCore::IconDatabase::iconDatabaseSyncThread() (this=0x7f785d9e8000) at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/loader/icon/IconDatabase.cpp:1028
#10 0x00007f786b2a10c5 in std::function<void ()>::operator()() const (this=0x7f7803b49b30) at /usr/include/c++/7/bits/std_function.h:669
#11 0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3190) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#12 0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9010) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#13 0x00007f78694c75bd in start_thread (arg=0x7f7803b4a700) at pthread_create.c:456
#14 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 5 (Thread 0x7f7855a56700 (LWP 3692)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=7, fds=0x7f784c002fc0, timeout=<optimized out>, context=0x7f7850014340) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f7850014340, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f7850013e00) at gmain.c:4125
#4  0x00007f786b7f77a6 in gdbus_shared_thread_func (user_data=0x7f7850014310) at gdbusprivate.c:247
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536c8bd320) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f7855a56700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 4 (Thread 0x7f7856257700 (LWP 3691)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7f78480008c0, timeout=<optimized out>, context=0x7f7850013af0) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=context@entry=0x7f7850013af0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a25555c in g_main_context_iteration (context=0x7f7850013af0, may_block=may_block@entry=1) at gmain.c:3990
#4  0x00007f786a2555a1 in glib_worker_main (data=<optimized out>) at gmain.c:5783
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536c8bd2d0) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f7856257700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 3 (Thread 0x7f7856a58700 (LWP 3690)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x7f78500010e0, timeout=<optimized out>, context=0x56536c8c2bc0) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=context@entry=0x56536c8c2bc0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a25555c in g_main_context_iteration (context=0x56536c8c2bc0, may_block=1) at gmain.c:3990
#4  0x00007f7856a5ff3d in dconf_gdbus_worker_thread () at /usr/lib64/gio/modules/libdconfsettings.so
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536c8bccf0) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f7856a58700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 2 (Thread 0x7f785e207700 (LWP 3689)):
#0  0x00007f78694cda2b in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x7f786b4d14b4 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3124>)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f78694cda2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x56536c8a4ae0, cond=0x7f786b4d1488 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3080>) at pthread_cond_wait.c:502
#2  0x00007f78694cda2b in __pthread_cond_wait (cond=0x7f786b4d1488 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3080>, mutex=0x56536c8a4ae0) at pthread_cond_wait.c:655
#3  0x00007f7868fe87bc in std::condition_variable::wait(std::unique_lock<std::mutex>&) () at /lib64/libstdc++.so.6
#4  0x00007f786b2ceaa7 in std::_V2::condition_variable_any::wait<std::unique_lock<bmalloc::Mutex> >(std::unique_lock<bmalloc::Mutex>&) (__lock=<synthetic pointer>..., this=<optimized out>)
    at /usr/include/c++/7/condition_variable:251
#5  0x00007f786b2ceaa7 in std::_V2::condition_variable_any::wait<std::unique_lock<bmalloc::Mutex>, bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop()::{lambda()#1}>(std::unique_lock<bmalloc::Mutex>&, bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop()::{lambda()#1}) (__p=..., __lock=..., this=<optimized out>) at /usr/include/c++/7/condition_variable:260
#6  0x00007f786b2ceaa7 in bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop() (this=0x7f786b4d1480 <bmalloc::PerProcess<bmalloc::Heap>::s_memory+3072>)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:130
#7  0x00007f786b2cebe9 in bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadEntryPoint(bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>*) (asyncTask=<optimized out>)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:110
#8  0x00007f7868feeaaf in  () at /lib64/libstdc++.so.6
#9  0x00007f78694c75bd in start_thread (arg=0x7f785e207700) at pthread_create.c:456
#10 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 1 (Thread 0x7f7873eed680 (LWP 3686)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=<optimized out>, n_fds=5, fds=0x56536c934b90, timeout=<optimized out>, context=0x56536c8ac250) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=context@entry=0x56536c8ac250, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3924
#3  0x00007f786a25555c in g_main_context_iteration (context=context@entry=0x56536c8ac250, may_block=may_block@entry=1) at gmain.c:3990
#4  0x00007f786b7ca45d in g_application_run (application=0x56536c933200 [EphyShell], argc=<optimized out>, argv=<optimized out>) at gapplication.c:2381
#5  0x000056536c317888 in main ()
Comment 4 Carlos Garcia Campos 2017-02-22 09:00:43 PST
For som reason the thread we use to send/receive IPC messages is blocked sending a message, because sendmsg returned EAGAIN or EWOULDBLOCK and the poll never returns. That's why the UI process doesn't reply to the sync message from the web process. I don't know why poll never returns, but we should probably pass a timeout.
Comment 5 Fujii Hironori 2017-02-23 00:31:17 PST
I see the same problem in WebKit PS4 port.

Bastien didn't show all threads of web process in Comment 0. I
guess ReceiveQueue thread of web process is also blocked in the
poll in which UI process is. If receive buffers of both processes
become full, and ReceiveQueue threads of both processes is trying
to send, both threads will be blocked and won't read the data.

Easy workaround is enlarging receive buffers with setsockopt(SO_RCVBUF).

I think there are two choices of solutions:
1) Separate receiving and sending threads
2) Polling POLLIN and POLLOUT if sendmsg returns EWOULDBLOCK or EAGAIN in ReceiveQueue thread
Comment 6 Carlos Garcia Campos 2017-02-23 07:16:08 PST
Created attachment 302509 [details]
Patch
Comment 7 WebKit Commit Bot 2017-02-23 07:17:15 PST
Attachment 302509 [details] did not pass style-queue:


ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.cpp:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 8 Fujii Hironori 2017-02-23 23:04:16 PST
Comment on attachment 302509 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=302509&action=review

> Source/WebKit2/ChangeLog:13
> +        socket monitor as readSocketMonitor and adds another one for polling output. When sendsmg fails with

s/sendsmg/sendmsg/

> Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:365
> +bool Connection::sendOutputMessage(UnixMessage& outputMessage)

Mac port uses unique_ptr. You don't use unique_ptr<UnixMessage> for outputMessage for performance?

> Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:458
> +                            sendOutputMessage(*message);

You don't need to check the return value of sendOutputMessage?

> Source/WebKit2/Platform/IPC/unix/UnixMessage.h:66
> +class AttachmentInfo {

You don't need to move AttachmentInfo, too.

> Source/WebKit2/Platform/IPC/unix/UnixMessage.h:114
> +            memcpy(m_body, other.m_body, m_messageInfo.bodySize());

You don't need to copy the body if m_messageInfo.isMessageBodyIsOutOfLine().
Comment 9 Carlos Garcia Campos 2017-02-23 23:15:31 PST
(In reply to comment #8)
> Comment on attachment 302509 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=302509&action=review

Thanks for the review Fuji!

> > Source/WebKit2/ChangeLog:13
> > +        socket monitor as readSocketMonitor and adds another one for polling output. When sendsmg fails with
> 
> s/sendsmg/sendmsg/

Oops

> > Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:365
> > +bool Connection::sendOutputMessage(UnixMessage& outputMessage)
> 
> Mac port uses unique_ptr. You don't use unique_ptr<UnixMessage> for
> outputMessage for performance?

Yes, the case of EWOULDBLOCK hardly ever happens, so only in that case I heap allocate the message to saved it.

> > Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:458
> > +                            sendOutputMessage(*message);
> 
> You don't need to check the return value of sendOutputMessage?

I'm assuming it won't fail because the poll said we can write without blocking. In any case, what we do is calling sendOutgoingMessages() that will return early if sendOutputMessage failed.

> > Source/WebKit2/Platform/IPC/unix/UnixMessage.h:66
> > +class AttachmentInfo {
> 
> You don't need to move AttachmentInfo, too.

Right.

> > Source/WebKit2/Platform/IPC/unix/UnixMessage.h:114
> > +            memcpy(m_body, other.m_body, m_messageInfo.bodySize());
> 
> You don't need to copy the body if m_messageInfo.isMessageBodyIsOutOfLine().

Good point!
Comment 10 Carlos Garcia Campos 2017-02-23 23:49:44 PST
Created attachment 302650 [details]
Updated patch
Comment 11 WebKit Commit Bot 2017-02-23 23:52:24 PST
Attachment 302650 [details] did not pass style-queue:


ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.cpp:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 12 Bastien Nocera 2017-02-24 08:01:10 PST
Quick testing shows that this indeed fixes the problem for me, on top of the 2.15.90-1 package in Fedora rawhide.
Comment 13 Zan Dobersek 2017-02-26 23:22:06 PST
Comment on attachment 302650 [details]
Updated patch

View in context: https://bugs.webkit.org/attachment.cgi?id=302650&action=review

> Source/WebKit2/Platform/IPC/unix/UnixMessage.h:66
> +    UnixMessage(Encoder* encoder)

Encoder could be a reference.
Comment 14 Carlos Garcia Campos 2017-02-26 23:52:32 PST
Committed r213030: <http://trac.webkit.org/changeset/213030>
Comment 15 Michael Catanzaro 2017-02-27 11:08:35 PST
Comment on attachment 302650 [details]
Updated patch

View in context: https://bugs.webkit.org/attachment.cgi?id=302650&action=review

> Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:477
> +#if PLATFORM(GTK)

Why is there anything GTK-specific in ConnectionUnix.cpp? Can't we align our code with the other ports to avoid GTK-specific bugs?

At the very very least, all of these should be changed to if USE(GLIB), right?
Comment 16 Carlos Garcia Campos 2017-02-27 22:44:54 PST
(In reply to comment #15)
> Comment on attachment 302650 [details]
> Updated patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=302650&action=review
> 
> > Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:477
> > +#if PLATFORM(GTK)
> 
> Why is there anything GTK-specific in ConnectionUnix.cpp? Can't we align our
> code with the other ports to avoid GTK-specific bugs?

There's nothing GTK+ specific, it's glib, but EFL didn't use our gsocket monitor, I don't know why, so we had to use PLATFORM(GTK) instead of USE(GLIB). I agree we could have used USE(GLIB) && !PLATFORM(EFL), though. This bug is not GTK specific at all, the problem was in the poll we used when sendmsg returns EWOULDBLOCK. The solution is GTK+ specific, well, GLib specific, because we use our socket monitor to properly poll the socket also for writing in case of EWOULBLOCK using the run loop.

> At the very very least, all of these should be changed to if USE(GLIB),
> right?

Right, now that EFL is gone, that's exactly my plan. We could also make it ifdef free by converting our socket monitor into a platform-specific class with platform implementations. However, now that there's no other unix ports using this code, it's not easy for me to do that refactoring without knowing the other implementations.
Comment 17 Michael Catanzaro 2017-02-28 11:38:03 PST
(In reply to comment #16)
> Right, now that EFL is gone, that's exactly my plan. We could also make it
> ifdef free by converting our socket monitor into a platform-specific class
> with platform implementations. However, now that there's no other unix ports
> using this code, it's not easy for me to do that refactoring without knowing
> the other implementations.

Let's do this. Solution is to rename it to ConnectionGLib.cpp and just remove ConnectionUnix.cpp. If some future port wants to use it, they can bring it back at that time.
Comment 18 Carlos Garcia Campos 2017-02-28 22:33:21 PST
(In reply to comment #17)
> (In reply to comment #16)
> > Right, now that EFL is gone, that's exactly my plan. We could also make it
> > ifdef free by converting our socket monitor into a platform-specific class
> > with platform implementations. However, now that there's no other unix ports
> > using this code, it's not easy for me to do that refactoring without knowing
> > the other implementations.
> 
> Let's do this. Solution is to rename it to ConnectionGLib.cpp and just
> remove ConnectionUnix.cpp. If some future port wants to use it, they can
> bring it back at that time.

No, I haven't proposed this, a possible ConnectionGLib would be quite different (and simpler) using the GSocket API por everything. ConnectionUnix is common code except for the socket monitor, so let's just change the ifdefs to USE(GLIB). What I proposed was to make the socket monitor a common interface with platform implementations not the whole file. When we added this implementation, we (GTK, EFL and Qt ports) decided not to use platform APIs for this, to share the implementation.