Mir

Mir clients freeze in advance_buffer if you Alt+Tab too much

Bug #1236256 reported by Daniel van Vugt
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mir
Expired
Critical
Unassigned

Bug Description

TEST CASE:
1. Start mir_demo_server_shell
2. Start mir_demo_client_eglplasma
3. Start mir_demo_client_egltriangle
4. Alt+Tab slowly, making sure you can switch between clients.
5. Hold down Alt+Tab to switch rapidly.

Expected: Clients switch rapidly and keep running.
Observed: Clients switch rapidly but eventually freeze (stop rendering), one by one. The shell continues to respond to input, but once a client is frozen, it stays that way until restarted.

Tags: input
Revision history for this message
Daniel van Vugt (vanvugt) wrote :
Download full text (3.6 KiB)

The hang is predictably under swap buffers:

[Switching to thread 1 (Thread 0x7f4a09f2b780 (LWP 32448))]
#0 pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
185 in ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
#0 pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1 0x00007f4a07ef21ec in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2 0x00007f4a09a8aeb9 in MirWaitHandle::wait_for_all (this=0x14847d0)
    at /home/dan/bzr/mir/dev/src/client/mir_wait_handle.cpp:54
#3 0x00007f4a09a8249f in mir_wait_for (wait_handle=0x14847d0)
    at /home/dan/bzr/mir/dev/src/client/mir_client_library.cpp:367
#4 0x00007f4a09a7c612 in mir::client::gbm::GBMNativeSurface::advance_buffer (
    this=0x7f4a00001c50, buffer_package=0x7fff5d22c070)
    at /home/dan/bzr/mir/dev/src/client/gbm/gbm_native_surface.cpp:63
#5 0x00007f4a09a7c510 in (anonymous namespace)::advance_buffer_static (
    surface=0x7f4a00001c50, buffer_package=0x7fff5d22c070)
    at /home/dan/bzr/mir/dev/src/client/gbm/gbm_native_surface.cpp:31
#6 0x00007f4a0971b447 in mir_advance_colour_buffer (surf=<optimised out>,
    surf=<optimised out>)
    at ../../../../../../src/egl/drivers/dri2/platform_mir.c:139
#7 0x00007f4a0971b509 in dri2_swap_buffers (drv=<optimised out>,
    disp=<optimised out>, draw=0x14a1930)
    at ../../../../../../src/egl/drivers/dri2/platform_mir.c:265
#8 0x00007f4a0970d496 in eglSwapBuffers (dpy=0x14a0c70,
    surface=<optimised out>) at ../../../../../src/egl/main/eglapi.c:698
#9 0x0000000000401f4e in mir_eglapp_swap_buffers ()
    at /home/dan/bzr/mir/dev/examples/eglapp.c:80
#10 0x0000000000401e35 in main (argc=1, argv=0x7fff5d22d148)
    at /home/dan/bzr/mir/dev/examples/eglplasma.c:155

---

[Switching to thread 1 (Thread 0x7f1170e1b780 (LWP 32443))]
#0 pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
185 in ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
#0 pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1 0x00007f116ede21ec in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2 0x00007f117097aeb9 in MirWaitHandle::wait_for_all (this=0x7c27d0)
    at /home/dan/bzr/mir/dev/src/client/mir_wait_handle.cpp:54
#3 0x00007f117097249f in mir_wait_for (wait_handle=0x7c27d0)
    at /home/dan/bzr/mir/dev/src/client/mir_client_library.cpp:367
#4 0x00007f117096c612 in mir::client::gbm::GBMNativeSurface::advance_buffer (
    this=0x7f1168001c50, buffer_package=0x7fffcfc06750)
    at /home/dan/bzr/mir/dev/src/client/gbm/gbm_native_surface.cpp:63
#5 0x00007f117096c510 in (anonymous namespace)::advance_buffer_static (
    surface=0x7f1168001c50, buffer_package=0x7fffcfc06750)
    at /home/dan/bzr/mir/dev/src/client/gbm/gbm_native_surface.cpp:31
#6 0x00007f117060b447 in mir_advance_colour_buffer (surf=<optimised out>,
    surf=<optimised out>)
    at ../../../../../../src/egl/drivers/dri2/platform_mir.c:...

Read more...

summary: - Mir clients freeze if you Alt+Tab too much
+ Mir clients freeze in
+ mir::client::gbm::GBMNativeSurface::advance_buffer() if you Alt+Tab too
+ much
summary: - Mir clients freeze in
- mir::client::gbm::GBMNativeSurface::advance_buffer() if you Alt+Tab too
- much
+ Mir clients freeze in advance_buffer if you Alt+Tab too much
Changed in mir:
assignee: nobody → Daniel van Vugt (vanvugt)
status: Triaged → In Progress
Changed in mir:
milestone: none → 0.1.0
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Can't reproduce it now... !?

Changed in mir:
status: In Progress → Incomplete
milestone: 0.1.0 → none
tags: added: input
Changed in mir:
assignee: Daniel van Vugt (vanvugt) → nobody
Revision history for this message
kevin gunn (kgunn72) wrote :

bug seems overcome by events, moving to invalid...reactivate if you can repro

Changed in mir:
status: Incomplete → Invalid
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

It was definitely a very bad bug when I was seeing it. I'd rather it expired naturally. "Invalid" means it's not a bug, which is untrue.

Changed in mir:
status: Invalid → Incomplete
Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for Mir because there has been no activity for 60 days.]

Changed in mir:
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.