Bug 164983 - [GTK] Slow copy and paste between workspaces
Summary: [GTK] Slow copy and paste between workspaces
Status: RESOLVED WONTFIX
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKitGTK (show other bugs)
Version: Other
Hardware: All Linux
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-11-18 23:39 PST by Berend De Schouwer
Modified: 2016-11-29 06:37 PST (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Berend De Schouwer 2016-11-18 23:39:51 PST
Copy and paste between applications where either the source or the destination application has a WebkitGTK+ widget can be slow.

Environment: Gnome Shell on Wayland
Version: 2.14.1-2.fc25 (Fedora 25)

Copy and Paste will fail when the applications are on separate workspaces.  When the applications are on the same workspace copy and paste works fine.

Copying *from* a WebkitGTK+ application to a any other application requires the source application to be visible after "paste" is actioned.  This requires swapping backwards and forwards between workspaces.

1. Start a WebkitGTK+ application (epiphany) on workspace 1.
2. Start a different application (gedit) on workspace 2.
3. Go to workspace 1, and select text, context-menu -> copy.
4. Go to workspace 2, context-menu -> paste
   ... nothing happens.
5. Go back to workspace 1 (do nothing)
   ... text has been pasted
6. Go to workspace 2, confirm pasted text.

Various applications were tested.  The two WebkitGTK+ applications that were tested were Epiphany and Evolution.  Other applications tested include gedit, gnome-calculator, gnome-terminal, firefox, chrome, konsole, gnome-music, gnome-builder, nautilus, gnome-font-viewer, gnome-shell.

Epiphany fails both on the WebkitGTK+ widget, and on a normal GTK+ widget.  It fails on both web content, and the URL bar.

Downstream bug:
https://bugzilla.redhat.com/show_bug.cgi?id=1396009
Comment 1 Tomas Popela 2016-11-23 08:24:31 PST
In https://bugzilla.redhat.com/show_bug.cgi?id=1394993 user observes following in the console:

Nov 15 11:14:59 shrek.rexursive.com evolution[10057]: Error writing selection data: Error writing to file descriptor: Broken pipe
Comment 2 Carlos Garnacho 2016-11-28 10:38:04 PST
Running epiphany -p with WAYLAND_DEBUG=1, I see this when switching out of its workspace (no need to copy anything to the clipboard, nor opening a page for that matter, just the default "welcome to web" internal page is enough):

[2241450,854] wl_callback@41.done(31935208)
[2241459,721]  -> zxdg_toplevel_v6@34.set_min_size(405, 47)
[2241459,761]  -> zxdg_toplevel_v6@34.set_max_size(0, 0)
[2241459,773]  -> zxdg_surface_v6@33.set_window_geometry(0, 0, 1080, 692)
[2241459,786]  -> wl_compositor@4.create_region(new id wl_region@41)
[2241459,792]  -> wl_region@41.add(0, 0, 1080, 692)
[2241459,801]  -> wl_surface@31.set_opaque_region(wl_region@41)
[2241459,806]  -> wl_region@41.destroy()
[2241459,810]  -> wl_compositor@4.create_region(new id wl_region@39)
[2241459,815]  -> wl_region@39.add(-10, -10, 1100, 712)
[2241459,823]  -> wl_surface@31.set_input_region(wl_region@39)
[2241459,827]  -> wl_region@39.destroy()
[2241460,233]  -> wl_surface@31.frame(new id wl_callback@42)
[2241460,248]  -> wl_surface@31.attach(wl_buffer@37, 0, 0)
[2241460,261]  -> wl_surface@31.damage(0, 0, 2147483647, 2147483647)
[2241460,469]  -> wl_surface@31.commit()

Note the wl_surface@31.frame() call, it's creating a callback that is not being processed. When switching back to the workspace again, the callback is dispatched:

[2291824,130] wl_display@1.delete_id(41)
[2291824,182] wl_display@1.delete_id(39)
[2291824,189] wl_display@1.delete_id(42)
[2291824,194] wl_buffer@43.release()
[2291824,201] wl_callback@42.done(31985582)
[2291832,835]  -> zxdg_toplevel_v6@34.set_min_size(405, 47)
[2291832,870]  -> zxdg_toplevel_v6@34.set_max_size(0, 0)
...

This is a backtrace snapshot of the moment ephy doesn't paste the contents across workspaces:

(gdb) t a a bt

Thread 15 (Thread 0x7fff757fa700 (LWP 5204)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, 
    n_fds=1, fds=0x7fff60001370, timeout=<optimized out>, 
    context=0x7fff60000900) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
#2  g_main_context_iterate (context=0x7fff60000900, block=block@entry=1, 
    dispatch=dispatch@entry=1, self=<optimized out>)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc8752 in g_main_loop_run (loop=0x7fff60001240)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:4125
#4  0x00007ffff42c4b70 in WTF::RunLoop::run() ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#5  0x00007ffff42c37e2 in std::_Function_handler<void (), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::{lambda()#1}>::_M_invoke(std::_Any_data const&) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#6  0x00007ffff429e3d5 in WTF::threadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#7  0x00007ffff42c230a in WTF::wtfThreadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#8  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#9  0x00007fffef213f6f in clone () from /lib64/libc.so.6
---Type <return> to continue, or q <return> to quit---

Thread 14 (Thread 0x7fff75ffb700 (LWP 5203)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, 
    n_fds=1, fds=0x7fff5c001370, timeout=<optimized out>, 
    context=0x7fff5c000900) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
#2  g_main_context_iterate (context=0x7fff5c000900, block=block@entry=1, 
    dispatch=dispatch@entry=1, self=<optimized out>)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc8752 in g_main_loop_run (loop=0x7fff5c001240)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:4125
#4  0x00007ffff42c4b70 in WTF::RunLoop::run() ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#5  0x00007ffff42c37e2 in std::_Function_handler<void (), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::{lambda()#1}>::_M_invoke(std::_Any_data const&) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#6  0x00007ffff429e3d5 in WTF::threadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#7  0x00007ffff42c230a in WTF::wtfThreadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#8  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#9  0x00007fffef213f6f in clone () from /lib64/libc.so.6
---Type <return> to continue, or q <return> to quit---

Thread 11 (Thread 0x7fff777fe700 (LWP 5198)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, 
    n_fds=1, fds=0x7fff64001370, timeout=<optimized out>, 
    context=0x7fff64000900) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
#2  g_main_context_iterate (context=0x7fff64000900, block=block@entry=1, 
    dispatch=dispatch@entry=1, self=<optimized out>)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc8752 in g_main_loop_run (loop=0x7fff64001240)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:4125
#4  0x00007ffff42c4b70 in WTF::RunLoop::run() ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#5  0x00007ffff42c37e2 in std::_Function_handler<void (), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::{lambda()#1}>::_M_invoke(std::_Any_data const&) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#6  0x00007ffff429e3d5 in WTF::threadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#7  0x00007ffff42c230a in WTF::wtfThreadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#8  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#9  0x00007fffef213f6f in clone () from /lib64/libc.so.6
---Type <return> to continue, or q <return> to quit---

Thread 10 (Thread 0x7fff77fff700 (LWP 5197)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, 
    n_fds=1, fds=0x7fff6c001370, timeout=<optimized out>, 
    context=0x7fff6c000900) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
#2  g_main_context_iterate (context=0x7fff6c000900, block=block@entry=1, 
    dispatch=dispatch@entry=1, self=<optimized out>)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc8752 in g_main_loop_run (loop=0x7fff6c001240)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:4125
#4  0x00007ffff42c4b70 in WTF::RunLoop::run() ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#5  0x00007ffff42c37e2 in std::_Function_handler<void (), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::{lambda()#1}>::_M_invoke(std::_Any_data const&) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#6  0x00007ffff429e3d5 in WTF::threadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#7  0x00007ffff42c230a in WTF::wtfThreadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#8  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#9  0x00007fffef213f6f in clone () from /lib64/libc.so.6
---Type <return> to continue, or q <return> to quit---

Thread 9 (Thread 0x7fff8496a700 (LWP 5196)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, 
    n_fds=1, fds=0x7fff70001370, timeout=<optimized out>, 
    context=0x7fff70000900) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
#2  g_main_context_iterate (context=0x7fff70000900, block=block@entry=1, 
    dispatch=dispatch@entry=1, self=<optimized out>)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc8752 in g_main_loop_run (loop=0x7fff70001240)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:4125
#4  0x00007ffff42c4b70 in WTF::RunLoop::run() ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#5  0x00007ffff42c37e2 in std::_Function_handler<void (), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::{lambda()#1}>::_M_invoke(std::_Any_data const&) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#6  0x00007ffff429e3d5 in WTF::threadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#7  0x00007ffff42c230a in WTF::wtfThreadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#8  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#9  0x00007fffef213f6f in clone () from /lib64/libc.so.6
---Type <return> to continue, or q <return> to quit---

Thread 8 (Thread 0x7fff857f2700 (LWP 5192)):
#0  0x00007fffef20dbe9 in syscall () from /lib64/libc.so.6
#1  0x00007ffff000c32f in g_cond_wait (cond=cond@entry=0x555555fa1b08, 
    mutex=mutex@entry=0x555555fa1b00)
    at /home/carlos/Source/gnome/glib/glib/gthread-posix.c:1395
#2  0x00007fffeff9dc1b in g_async_queue_pop_intern_unlocked (
    queue=queue@entry=0x555555fa1b00, wait=wait@entry=1, 
    end_time=end_time@entry=-1)
    at /home/carlos/Source/gnome/glib/glib/gasyncqueue.c:419
#3  0x00007fffeff9e057 in g_async_queue_pop (queue=0x555555fa1b00)
    at /home/carlos/Source/gnome/glib/glib/gasyncqueue.c:453
#4  0x00005555555d04a0 in run_history_service_thread ()
#5  0x00007fffeffeeed3 in g_thread_proxy (data=0x555555e1bed0)
    at /home/carlos/Source/gnome/glib/glib/gthread.c:784
#6  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#7  0x00007fffef213f6f in clone () from /lib64/libc.so.6

Thread 7 (Thread 0x7fff85ff3700 (LWP 5191)):
#0  0x00007fffef4df809 in pthread_cond_timedwait@@GLIBC_2.3.2 ()
   from /lib64/libpthread.so.0
#1  0x00007ffff429b763 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, std::chrono:---Type <return> to continue, or q <return> to quit---
:time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >) () from /lib64/libjavascriptcoregtk-4.0.so.18
#2  0x00007ffff428e902 in WTF::sleep(double) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#3  0x00007ffff4c5e0ed in std::_Function_handler<void (), WebKit::MemoryPressureMonitor::MemoryPressureMonitor()::{lambda()#1}>::_M_invoke(std::_Any_data const&) () from /lib64/libwebkit2gtk-4.0.so.37
#4  0x00007ffff429e3d5 in WTF::threadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#5  0x00007ffff42c230a in WTF::wtfThreadEntryPoint(void*) ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#6  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#7  0x00007fffef213f6f in clone () from /lib64/libc.so.6

Thread 6 (Thread 0x7fffd48fd700 (LWP 5188)):
#0  0x00007fffef4df460 in pthread_cond_wait@@GLIBC_2.3.2 ()
   from /lib64/libpthread.so.0
#1  0x00007fffe82b72ec in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2  0x00007ffff429b875 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >) () from /lib64/libjavascriptcoregtk-4.0.so.18
---Type <return> to continue, or q <return> to quit---
#3  0x00007ffff5432af7 in WebCore::IconDatabase::syncThreadMainLoop() () from /lib64/libwebkit2gtk-4.0.so.37
#4  0x00007ffff5433f21 in WebCore::IconDatabase::iconDatabaseSyncThread() () from /lib64/libwebkit2gtk-4.0.so.37
#5  0x00007ffff429e3d5 in WTF::threadEntryPoint(void*) () from /lib64/libjavascriptcoregtk-4.0.so.18
#6  0x00007ffff42c230a in WTF::wtfThreadEntryPoint(void*) () from /lib64/libjavascriptcoregtk-4.0.so.18
#7  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#8  0x00007fffef213f6f in clone () from /lib64/libc.so.6

Thread 5 (Thread 0x7fffd73ca700 (LWP 5187)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x7fffcc0010c0, timeout=<optimized out>, 
    context=0x55555587c800) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
#2  g_main_context_iterate (context=context@entry=0x55555587c800, block=block@entry=1, dispatch=dispatch@entry=1, 
    self=<optimized out>) at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc84dc in g_main_context_iteration (context=0x55555587c800, may_block=1)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3990
#4  0x00007fffd85f112e in dconf_gdbus_worker_thread (user_data=0x55555587c800)
    at /home/carlos/Source/gnome/dconf/gdbus/dconf-gdbus-thread.c:82
#5  0x00007fffeffeeed3 in g_thread_proxy (data=0x555555878540) at /home/carlos/Source/gnome/glib/glib/gthread.c:784
#6  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#7  0x00007fffef213f6f in clone () from /lib64/libc.so.6

Thread 4 (Thread 0x7fffd7bcb700 (LWP 5186)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7fffc80010c0, timeout=<optimized out>, 
    context=0x555555897760) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
#2  g_main_context_iterate (context=0x555555897760, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc8752 in g_main_loop_run (loop=0x55555585da60) at /home/carlos/Source/gnome/glib/glib/gmain.c:4125
#4  0x00007ffff05a9e06 in gdbus_shared_thread_func (user_data=0x555555897730)
    at /home/carlos/Source/gnome/glib/gio/gdbusprivate.c:247
#5  0x00007fffeffeeed3 in g_thread_proxy (data=0x555555878140) at /home/carlos/Source/gnome/glib/glib/gthread.c:784
#6  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#7  0x00007fffef213f6f in clone () from /lib64/libc.so.6

Thread 3 (Thread 0x7fffd83cc700 (LWP 5185)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffeffc83d6 in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7fffd00008e0, timeout=<optimized out>, 
    context=0x555555896fa0) at /home/carlos/Source/gnome/glib/glib/gmain.c:4228
---Type <return> to continue, or q <return> to quit---
#2  g_main_context_iterate (context=context@entry=0x555555896fa0, block=block@entry=1, dispatch=dispatch@entry=1, 
    self=<optimized out>) at /home/carlos/Source/gnome/glib/glib/gmain.c:3924
#3  0x00007fffeffc84dc in g_main_context_iteration (context=0x555555896fa0, may_block=may_block@entry=1)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3990
#4  0x00007fffeffc8521 in glib_worker_main (data=<optimized out>) at /home/carlos/Source/gnome/glib/glib/gmain.c:5783
#5  0x00007fffeffeeed3 in g_thread_proxy (data=0x5555558780f0) at /home/carlos/Source/gnome/glib/glib/gthread.c:784
#6  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#7  0x00007fffef213f6f in clone () from /lib64/libc.so.6

Thread 2 (Thread 0x7fffe0526700 (LWP 5184)):
#0  0x00007fffef4df460 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x00007fffe82b72ec in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2  0x00007ffff42ca366 in bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop() ()
   from /lib64/libjavascriptcoregtk-4.0.so.18
#3  0x00007ffff42ca499 in bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadEntryPoint(bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>*) () from /lib64/libjavascriptcoregtk-4.0.so.18
#4  0x00007fffe82bd35f in ?? () from /lib64/libstdc++.so.6
#5  0x00007fffef4d96ca in start_thread () from /lib64/libpthread.so.0
#6  0x00007fffef213f6f in clone () from /lib64/libc.so.6

Thread 1 (Thread 0x7ffff7ee6ac0 (LWP 5180)):
#0  0x00007fffef20800d in poll () from /lib64/libc.so.6
#1  0x00007fffe858f8e9 in wl_display_poll (display=display@entry=0x555555868a70, events=events@entry=1)
    at /home/carlos/Source/gnome/wayland/src/wayland-client.c:1593
#2  0x00007fffe8590dac in wl_display_dispatch_queue (display=0x555555868a70, queue=0x5555558c56c0)
    at /home/carlos/Source/gnome/wayland/src/wayland-client.c:1666
#3  0x00007fffec1183ab in get_back_bo () from /lib64/libEGL.so.1
#4  0x00007fffec118fac in dri2_wl_query_buffer_age () from /lib64/libEGL.so.1
#5  0x00007fffec111a16 in _eglQuerySurface () from /lib64/libEGL.so.1
#6  0x00007fffec10a309 in eglQuerySurface () from /lib64/libEGL.so.1
#7  0x00007ffff1ba3e03 in gdk_wayland_window_invalidate_for_new_frame (window=0x555555874330, update_area=0x555556568f40)
    at /home/carlos/Source/gnome/gtk+-3/gdk/wayland/gdkglcontext-wayland.c:65
#8  0x00007ffff1b60a5a in gdk_window_process_updates_internal (window=0x555555874330)
    at /home/carlos/Source/gnome/gtk+-3/gdk/gdkwindow.c:3962
#9  0x00007ffff1b60c94 in gdk_window_process_updates_with_mode (window=<optimized out>, recurse_mode=<optimized out>)
    at /home/carlos/Source/gnome/gtk+-3/gdk/gdkwindow.c:4179
#10 0x00007ffff02a0515 in g_closure_invoke (closure=0x555556581a20, return_value=return_value@entry=0x0, n_param_values=1, 
    param_values=param_values@entry=0x7fffffffd400, invocation_hint=invocation_hint@entry=0x7fffffffd3a0)
---Type <return> to continue, or q <return> to quit---
    at /home/carlos/Source/gnome/glib/gobject/gclosure.c:804
#11 0x00007ffff02b1d92 in signal_emit_unlocked_R (node=node@entry=0x5555558c5650, detail=detail@entry=0, 
    instance=instance@entry=0x5555558d7270, emission_return=emission_return@entry=0x0, 
    instance_and_params=instance_and_params@entry=0x7fffffffd400) at /home/carlos/Source/gnome/glib/gobject/gsignal.c:3635
#12 0x00007ffff02ba8cb in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, 
    var_args=var_args@entry=0x7fffffffd598) at /home/carlos/Source/gnome/glib/gobject/gsignal.c:3391
#13 0x00007ffff02bac62 in g_signal_emit (instance=instance@entry=0x5555558d7270, signal_id=<optimized out>, detail=detail@entry=0)
    at /home/carlos/Source/gnome/glib/gobject/gsignal.c:3447
#14 0x00007ffff1b5843f in _gdk_frame_clock_emit_paint (frame_clock=frame_clock@entry=0x5555558d7270)
    at /home/carlos/Source/gnome/gtk+-3/gdk/gdkframeclock.c:640
#15 0x00007ffff1b58ad9 in gdk_frame_clock_paint_idle (data=0x5555558d7270)
    at /home/carlos/Source/gnome/gtk+-3/gdk/gdkframeclockidle.c:430
#16 0x00007ffff1b442a8 in gdk_threads_dispatch (data=data@entry=0x555555a03c60) at /home/carlos/Source/gnome/gtk+-3/gdk/gdk.c:743
#17 0x00007fffeffc8afd in g_timeout_dispatch (source=0x555555a7e390, callback=0x7ffff1b44280 <gdk_threads_dispatch>, 
    user_data=0x555555a03c60) at /home/carlos/Source/gnome/glib/glib/gmain.c:4674
#18 0x00007fffeffc80f2 in g_main_dispatch (context=0x555555868050) at /home/carlos/Source/gnome/glib/glib/gmain.c:3203
#19 g_main_context_dispatch (context=context@entry=0x555555868050) at /home/carlos/Source/gnome/glib/glib/gmain.c:3856
#20 0x00007fffeffc8438 in g_main_context_iterate (context=context@entry=0x555555868050, block=block@entry=1, 
    dispatch=dispatch@entry=1, self=<optimized out>) at /home/carlos/Source/gnome/glib/glib/gmain.c:3929
#21 0x00007fffeffc84dc in g_main_context_iteration (context=context@entry=0x555555868050, may_block=may_block@entry=1)
    at /home/carlos/Source/gnome/glib/glib/gmain.c:3990
#22 0x00007ffff057f71d in g_application_run (application=0x5555558ed290, argc=<optimized out>, argv=0x7fffffffd998)
    at /home/carlos/Source/gnome/glib/gio/gapplication.c:2381
#23 0x00005555555867a4 in main ()

I can see thread 1 stuck on poll() inside wl_display_dispatch_queue(), which according to the documentation has several threading pitfalls, at the moment I can only speculate that something like that is related here.

I am also uncertain of where does the wl_surface_frame() call come from, but I think it is triggered from mesa code, if SwapInterval is non-zero.

Also, it's worth pointing out that this just doesn't affect c&p, other things like desktop notifications are not dispatched until epiphany is shown.
Comment 3 Carlos Garnacho 2016-11-28 10:42:32 PST
(In reply to comment #1)
> In https://bugzilla.redhat.com/show_bug.cgi?id=1394993 user observes
> following in the console:
> 
> Nov 15 11:14:59 shrek.rexursive.com evolution[10057]: Error writing
> selection data: Error writing to file descriptor: Broken pipe

This is more or less expected in this situation. If the clipboard source is blocked, the c&p operation destination side will eventually give up (gdk sets a 30s timeout IIRC) and close the pipe, that will be seen as a broken pipe on the webkit app side when it eventually regains control and tries to write the clipboard content.
Comment 4 Michael Catanzaro 2016-11-29 06:37:58 PST
Carlos Garnacho discovered that this is https://bugzilla.gnome.org/show_bug.cgi?id=769835 -- thanks! -- so there's probably not anything to be changed in WebKit.