Disabling an output can cause vblank events to be missed
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Unity |
Fix Released
|
High
|
Chris Halse Rogers | ||
compiz (Ubuntu) |
Invalid
|
High
|
Chris Halse Rogers | ||
Natty |
Invalid
|
High
|
Chris Halse Rogers | ||
linux (Ubuntu) |
Fix Released
|
High
|
Canonical Kernel Team | ||
Natty |
Fix Released
|
High
|
Canonical Kernel SRU Team | ||
unity (Ubuntu) |
Fix Released
|
High
|
Unassigned | ||
Natty |
Fix Released
|
High
|
Unassigned |
Bug Description
When an output gets disabled - by being switched off by DPMS, unplugged, etc - it's possible for applications to have pending vblank events waiting on this output. If this occurs, the application will never receive the vblank event. This manifests as the app appearing to hang (in poll() on the X connection, if you attach GDB).
Binary package hint: compiz
This seems to happen when I'm not at my laptop (ie, when the screensaver has activated usually). When I return to my laptop, I find it in a state which appears to be completely frozen (ie, nothing gets repainted on the screen). However, I can switch to a console and things appear to be working normally. I can send a SIGKILL to compiz and start another WM, and then everything starts working normally again (although if I restart compiz, it often crashes until I've restarted my laptop).
If I attach gdb to the hung compiz, I always see a trace which looks like this:
0x00007f53f3dc8e33 in __poll (fds=<value optimised out>, nfds=<value optimised out>, timeout=<value optimised out>) at ../sysdeps/
87 ../sysdeps/
in ../sysdeps/
(gdb) bt[K[Kbt full
#0 0x00007f53f3dc8e33 in __poll (fds=<value optimised out>, nfds=<value optimised out>, timeout=<value optimised out>) at ../sysdeps/
resultvar = 184467440737095
oldtype = 0
result = <value optimised out>
#1 0x00007f53f738d512 in _xcb_conn_wait (c=0x1b79060, cond=<value optimised out>, vector=0x0, count=0x0) at ../../src/
ret = <value optimised out>
fd = {fd = 3, events = 1, revents = 0}
#2 0x00007f53f738eb3f in xcb_wait_for_reply (c=0x1b79060, request=390272, e=0x7fff56067648) at ../../src/
cond = {__data = {__lock = 0, __futex = 0, __total_seq = 0, __wakeup_seq = 0, __woken_seq = 0, __mutex = 0x0, __nwaiters = 0, __broadcast_seq = 0},
__size = '\000' <repeats 47 times>, __align = 0}
reader = {request = 390272, data = 0x7fff560675a0, next = 0x0}
prev_reader = <value optimised out>
ret = 0x0
#3 0x00007f53f75e188d in _XReply (dpy=0x1b77e10, rep=0x7fff560676a0, extra=0, discard=0) at ../../src/
req = 0x1b74780
response = <value optimised out>
error = 0x0
c = 0x1b79060
reply = <value optimised out>
current = 0x1b74780
#4 0x00007f53efb6993b in DRI2WaitMSC (dpy=0x1b77e10, drawable=100, target_msc=0, divisor=2, remainder=1, ust=0x7fff56067728, msc=0x7fff56067720, sbc=0x7fff56067718) at dri2.c:616
info = <value optimised out>
req = <value optimised out>
rep = {type = 64 '@', pad1 = 119 'w', sequenceNumber = 22022, length = 32767, ust_hi = 1443264328, ust_lo = 32767, msc_hi = 100, msc_lo = 0, sbc_hi = 2137562112,
sbc_lo = 3119085452}
#5 0x00007f53efb67df1 in dri2WaitForMSC (pdraw=<value optimised out>, target_msc=<value optimised out>, divisor=<value optimised out>, remainder=<value optimised out>,
ust=
dri2_ust = 29839872
dri2_msc = 29878048
dri2_sbc = 139998480560225
ret = -516
#6 0x00007f53efb3f81f in __glXWaitVideoS
gc = 0x1c7e720
psc = 0x1c77560
pdraw = <value optimised out>
ust = 2722
msc = <value optimised out>
sbc = 139998480562447
ret = <value optimised out>
#7 0x00007f53efdb71c4 in PrivateGLScreen
No symbol table info available.
#8 0x00007f53efdb737b in PrivateGLScreen
from /usr/lib/
No symbol table info available.
#9 0x00007f53effddb19 in CompositeScreen
No symbol table info available.
#10 0x00007f53effdf930 in CompositeScreen
No symbol table info available.
#11 0x00000000004219ff in CompTimeoutSour
No symbol table info available.
#12 0x000000000042146d in CompTimeoutSour
No symbol table info available.
#13 0x00007f53f5c649df in Glib::Source:
No symbol table info available.
#14 0x00007f53f5114bcd in g_main_dispatch (context=0x1ba7730) at /build/
dispatch = 0x7f53f5c64990 <Glib::
was_in_call = 0
user_data = 0x1c507a0
callback = 0x7f53f5c64b40
cb_funcs = 0x7f53f53bf630
cb_data = 0x1c45fe0
source = 0x1c50730
current = 0x1ba7e90
i = <value optimised out>
#15 g_main_
No locals.
#16 0x00007f53f51153a8 in g_main_
at /build/
timeout = 11
some_ready = 1
nfds = 14
fds = <value optimised out>
#17 0x00007f53f51159f2 in g_main_loop_run (loop=0x1c50880) at /build/
#18 0x0000000000429fba in CompScreen:
No symbol table info available.
#19 0x0000000000422f70 in main ()
This is happening fairly often for me (3-4 times per day)
tags: | added: unity |
Changed in compiz (Ubuntu): | |
status: | Triaged → Incomplete |
tags: | removed: unity-priority |
Changed in compiz (Ubuntu Natty): | |
status: | Incomplete → Fix Committed |
assignee: | Chris Halse Rogers (raof) → Sam "SmSpillaz" Spilsbury (smspillaz) |
Changed in unity: | |
status: | New → Fix Committed |
importance: | Undecided → High |
assignee: | nobody → Sam "SmSpillaz" Spilsbury (smspillaz) |
milestone: | none → 3.8.10 |
Changed in unity (Ubuntu Natty): | |
status: | New → Fix Committed |
Changed in unity: | |
status: | Fix Committed → Triaged |
Changed in compiz (Ubuntu Natty): | |
status: | Fix Released → Triaged |
Changed in unity (Ubuntu Natty): | |
status: | Fix Committed → Triaged |
importance: | Undecided → High |
Changed in unity: | |
milestone: | 3.8.10 → 3.8.12 |
Changed in compiz (Ubuntu Natty): | |
milestone: | ubuntu-11.04 → natty-updates |
Changed in compiz (Ubuntu): | |
milestone: | ubuntu-11.04 → none |
Changed in linux (Ubuntu Natty): | |
milestone: | none → natty-updates |
Changed in unity (Ubuntu Natty): | |
milestone: | none → natty-updates |
tags: | added: blocks-hwcert hwe-blocker |
Changed in linux (Ubuntu): | |
status: | Triaged → Fix Released |
summary: |
- Something blocks compiz randomly several times per day + Disabling an output can cause vblank events to be missed |
description: | updated |
Changed in unity (Ubuntu): | |
assignee: | nobody → Canonical Desktop Experience Team (canonical-dx-team) |
Changed in unity (Ubuntu Natty): | |
assignee: | nobody → Canonical Desktop Experience Team (canonical-dx-team) |
tags: | added: blocks-hwcert-enablement |
Changed in unity (Ubuntu): | |
status: | Fix Committed → Fix Released |
Changed in unity (Ubuntu Natty): | |
status: | Fix Committed → Fix Released |
I don't get that so often, but I get some as well. Setting on the priority list.