I'm using tkabber (jabber IM client) with tabs. Someone send me a message, with regular text that when tkabber displays it causes intel ddx to die. If I display it with text editor (based on tkabber conversation log) then nothing bad happens. So I'm able to trigger it (very, very reliably) with tkabber.
When debugging is enabled it dies with:
X: kgem.h:564: kgem_bo_is_busy: Assertion `bo->refcnt' failed.
When debugging is disabled then immediately all texts on screen gets corrupted and few seconds after X freezes, even sysrq+r doesn't work.
I'm keeping that tkabber tab for future testing (I can switch to other git versions or apply some patches to test).
Note that this is first time I see such problem. I'm using tkabber a lot, getting different messages and no problem occurs. That one, single message contents makes driver go nuts. I've also tried git versions from december and few from january - all these die with this "tkabber test".
Here is debug=full log:
and kdm log:
Initializing built-in extension XFree86-DRI
Initializing built-in extension DRI2
Loading extension GLX
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Error: Meta_L added to symbol map for multiple modifiers
> Using Mod4, ignoring Mod1.
> Error: Key <META> added to map for multiple modifiers
> Using Mod4, ignoring Mod1.
> Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
> Ignoring extra symbols
Errors from xkbcomp are not fatal to the X server
Allocated pixmaps: 672 (cached: 5), bo: 236, 45162496 bytes (CPU bo: 9, 9752576 bytes)
Allocated pixmaps: 902 (cached: 5), bo: 301, 51916800 bytes (CPU bo: 25, 10063872 bytes)
X: kgem.h:566: kgem_bo_is_busy: Assertion `bo->refcnt' failed.
driver at 1cbc59a917e7352fc68aa0e26b1575cbd0ceab0d (so current git)
Right, the debug log says it is the glyph cache that gets accidentally destroyed - which fits in with the non-debug failure mode.
Now to piece together where the missing ref / extra unref is.
Thanks as this is likely the key to bug 73406 as well!
Created attachment 93346 [details] [review]
Clear composite state after flushing glyphs
I wonder if it is this simple...
Works. No longer crashses.
(ps. That tkabber message did contain � character in it. The rest was pure ascii.)
Created attachment 93349 [details] [review]
Reset composite state between switching glyph formats
v2, replace the shotgun with a precise scalpel.
v2 works, too. Thanks.
Author: Chris Wilson <firstname.lastname@example.org>
Date: Tue Feb 4 08:51:17 2014 +0000
sna/glyphs: Reset composite state between switching glyph formats
One path uses the mask channel, the other does not. We cannot rely on
overwriting all reused state in this case, and so we must clear the
composite state prior to use each time.
Reported-by: Arkadiusz Miskiewicz <email@example.com>
Signed-off-by: Chris Wilson <firstname.lastname@example.org>
Tested-by: Arkadiusz Miskiewicz <email@example.com>