Mir clients freeze in advance_buffer if you Alt+Tab too much
Bug #1236256 reported by
Daniel van Vugt
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Expired
|
Critical
|
Unassigned |
Bug Description
TEST CASE:
1. Start mir_demo_
2. Start mir_demo_
3. Start mir_demo_
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.
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 |
tags: | added: input |
Changed in mir: | |
assignee: | Daniel van Vugt (vanvugt) → nobody |
To post a comment you must log in.
The hang is predictably under swap buffers:
[Switching to thread 1 (Thread 0x7f4a09f2b780 (LWP 32448))] cond_wait@ @GLIBC_ 2.3.2 () sysdeps/ unix/sysv/ linux/x86_ 64/pthread_ cond_wait. S:185 sysdeps/ unix/sysv/ linux/x86_ 64/pthread_ cond_wait. S cond_wait@ @GLIBC_ 2.3.2 () sysdeps/ unix/sysv/ linux/x86_ 64/pthread_ cond_wait. S:185 variable: :wait(std: :unique_ lock<std: :mutex> &) () from /usr/lib/ x86_64- linux-gnu/ libstdc+ +.so.6 :wait_for_ all (this=0x14847d0) bzr/mir/ dev/src/ client/ mir_wait_ handle. cpp:54 0x14847d0) bzr/mir/ dev/src/ client/ mir_client_ library. cpp:367 :gbm::GBMNative Surface: :advance_ buffer ( 0x7f4a00001c50, buffer_ package= 0x7fff5d22c070) bzr/mir/ dev/src/ client/ gbm/gbm_ native_ surface. cpp:63 ::advance_ buffer_ static ( 0x7f4a00001c50, buffer_ package= 0x7fff5d22c070) bzr/mir/ dev/src/ client/ gbm/gbm_ native_ surface. cpp:31 colour_ buffer (surf=<optimised out>, ./../.. /../src/ egl/drivers/ dri2/platform_ mir.c:139 ./../.. /../src/ egl/drivers/ dri2/platform_ mir.c:265 <optimised out>) at ../../. ./../.. /src/egl/ main/eglapi. c:698 swap_buffers () bzr/mir/ dev/examples/ eglapp. c:80 d148) bzr/mir/ dev/examples/ eglplasma. c:155
#0 pthread_
at ../nptl/
185 in ../nptl/
#0 pthread_
at ../nptl/
#1 0x00007f4a07ef21ec in std::condition_
#2 0x00007f4a09a8aeb9 in MirWaitHandle:
at /home/dan/
#3 0x00007f4a09a8249f in mir_wait_for (wait_handle=
at /home/dan/
#4 0x00007f4a09a7c612 in mir::client:
this=
at /home/dan/
#5 0x00007f4a09a7c510 in (anonymous namespace)
surface=
at /home/dan/
#6 0x00007f4a0971b447 in mir_advance_
surf=<optimised out>)
at ../../.
#7 0x00007f4a0971b509 in dri2_swap_buffers (drv=<optimised out>,
disp=<optimised out>, draw=0x14a1930)
at ../../.
#8 0x00007f4a0970d496 in eglSwapBuffers (dpy=0x14a0c70,
surface=
#9 0x0000000000401f4e in mir_eglapp_
at /home/dan/
#10 0x0000000000401e35 in main (argc=1, argv=0x7fff5d22
at /home/dan/
---
[Switching to thread 1 (Thread 0x7f1170e1b780 (LWP 32443))] cond_wait@ @GLIBC_ 2.3.2 () sysdeps/ unix/sysv/ linux/x86_ 64/pthread_ cond_wait. S:185 sysdeps/ unix/sysv/ linux/x86_ 64/pthread_ cond_wait. S cond_wait@ @GLIBC_ 2.3.2 () sysdeps/ unix/sysv/ linux/x86_ 64/pthread_ cond_wait. S:185 variable: :wait(std: :unique_ lock<std: :mutex> &) () from /usr/lib/ x86_64- linux-gnu/ libstdc+ +.so.6 :wait_for_ all (this=0x7c27d0) bzr/mir/ dev/src/ client/ mir_wait_ handle. cpp:54 0x7c27d0) bzr/mir/ dev/src/ client/ mir_client_ library. cpp:367 :gbm::GBMNative Surface: :advance_ buffer ( 0x7f1168001c50, buffer_ package= 0x7fffcfc06750) bzr/mir/ dev/src/ client/ gbm/gbm_ native_ surface. cpp:63 ::advance_ buffer_ static ( 0x7f1168001c50, buffer_ package= 0x7fffcfc06750) bzr/mir/ dev/src/ client/ gbm/gbm_ native_ surface. cpp:31 colour_ buffer (surf=<optimised out>, ./../.. /../src/ egl/drivers/ dri2/platform_ mir.c:. ..
#0 pthread_
at ../nptl/
185 in ../nptl/
#0 pthread_
at ../nptl/
#1 0x00007f116ede21ec in std::condition_
#2 0x00007f117097aeb9 in MirWaitHandle:
at /home/dan/
#3 0x00007f117097249f in mir_wait_for (wait_handle=
at /home/dan/
#4 0x00007f117096c612 in mir::client:
this=
at /home/dan/
#5 0x00007f117096c510 in (anonymous namespace)
surface=
at /home/dan/
#6 0x00007f117060b447 in mir_advance_
surf=<optimised out>)
at ../../.