With an intel GPU, Mir trunk, latest wily, moving the client window between screens causes the nested server to crash soon after (although not immediately). The backtrace I get is: #0 0x00007ffff7089267 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55 #1 0x00007ffff708aeca in __GI_abort () at abort.c:89 #2 0x00007ffff70ccc53 in __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7ffff71e51a8 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175 #3 0x00007ffff70d4c69 in malloc_printerr (ptr=, str=0x7ffff71e12fa "free(): invalid pointer", action=1) at malloc.c:4965 #4 _int_free (av=, p=, have_lock=0) at malloc.c:3834 #5 0x00007ffff70d889c in __GI___libc_free (mem=) at malloc.c:2950 #6 0x00007fffeba360b9 in _mesa_delete_program (ctx=, prog=0x76fde0) at ../../../../src/mesa/program/program.c:407 #7 0x00007fffeba3617b in _mesa_reference_program_ (ctx=ctx@entry=0x7ffff7fcf038, ptr=ptr@entry=0x7b3870, prog=prog@entry=0x0) at ../../../../src/mesa/program/program.c:483 #8 0x00007fffeba18b37 in _mesa_reference_program (prog=0x0, ptr=, ctx=0x7ffff7fcf038) at ../../../../src/mesa/program/program.h:121 #9 _mesa_reference_vertprog (prog=0x0, ptr=, ctx=0x7ffff7fcf038) at ../../../../src/mesa/program/program.h:129 #10 _mesa_meta_end (ctx=ctx@entry=0x7ffff7fcf038) at ../../../../src/mesa/drivers/common/meta.c:961 #11 0x00007fffeba19448 in meta_clear (ctx=ctx@entry=0x7ffff7fcf038, buffers=buffers@entry=2, glsl=glsl@entry=true) at ../../../../src/mesa/drivers/common/meta.c:1817 #12 0x00007fffeba1991a in _mesa_meta_glsl_Clear (ctx=ctx@entry=0x7ffff7fcf038, buffers=buffers@entry=2) at ../../../../src/mesa/drivers/common/meta.c:1502 #13 0x00007fffebb50e4b in brw_clear (ctx=0x7ffff7fcf038, mask=0) at ../../../../../../../src/mesa/drivers/dri/i965/brw_clear.c:264 #14 0x00007ffff687fe0f in mir::renderer::gl::Renderer::render (this=0x7fffd40008c0, renderables=std::vector of length 2, capacity 2 = {...}) at /storage/work/mir/src/renderers/gl/renderer.cpp:198 #15 0x00007ffff67eca32 in mir::compositor::DefaultDisplayBufferCompositor::composite(std::vector, std::allocator > >&&) (this=this@entry=0x7fffd404a250, scene_elements=scene_elements@entry=) at /storage/work/mir/src/server/compositor/default_display_buffer_compositor.cpp:83 ---Type to continue, or q to quit--- #16 0x00007ffff67f3f1c in mir::compositor::CompositingFunctor::operator() (this=0x821c70) at /storage/work/mir/src/server/compositor/multi_threaded_compositor.cpp:143 #17 0x00007ffff687c261 in std::function::operator()() const (this=0x7fffe8b7ee70) at /usr/include/c++/5/functional:2271 #18 (anonymous namespace)::Task::execute (this=0x7fffe8b7ee70) at /storage/work/mir/src/server/thread/basic_thread_pool.cpp:40 #19 (anonymous namespace)::Worker::operator() (this=0x821d70) at /storage/work/mir/src/server/thread/basic_thread_pool.cpp:91 #20 std::__invoke<(anonymous namespace)::Worker> (__f=...) at /usr/include/c++/5/functional:201 #21 std::reference_wrapper<(anonymous namespace)::Worker>::operator()<> (this=) at /usr/include/c++/5/functional:428 #22 std::_Bind_simple()>::_M_invoke<> ( this=) at /usr/include/c++/5/functional:1531 #23 std::_Bind_simple()>::operator() ( this=) at /usr/include/c++/5/functional:1520 #24 std::thread::_Impl()> >::_M_run(void) (this=) at /usr/include/c++/5/thread:115 #25 0x00007ffff790c030 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #26 0x00007ffff74256aa in start_thread (arg=0x7fffe8b7f700) at pthread_create.c:333 #27 0x00007ffff715aeed in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109