evtouch driver lockups

Alexander Sabourenkov screwdriver at lxnt.info
Mon Nov 2 07:07:25 PST 2009


I'm seeing Xorg lock up (sleep in futex) during stress-testing touchscreens - that 
consists of many touches in quick succession, where each touch makes something be 

Backtraces are identical in upper part - the signal handler, and differ in the 
lower part, that is from frame 11 onwards, but it's always something to do with 
malloc/free. See the example backtrace below.

As far as I understand, one should not do any memory allocation/deallocation or, 
more generally, anything that might be protected with locks, in a signal handler.

Now, my question is: how do I fix that?

Example backtrace:

#0  0x00bf4422 in __kernel_vsyscall ()
#1  0x00235ae3 in __lll_lock_wait_private () at 
#2  0x001ccf07 in _L_lock_9496 () from /lib/tls/i686/cmov/libc.so.6
#3  0x001cb796 in *__GI___libc_free (mem=0x930a548) at malloc.c:3714
#4  0x08137a21 in Xfree (ptr=0xfffffe00) at ../../os/utils.c:1165
#5  0x0813127e in TimerFree (timer=0x930a548) at ../../os/WaitFor.c:518
#6  0x0062423b in DoBtnAction (local=0x9251898) at evtouch.c:260
#7  ReadInput (local=0x9251898) at evtouch.c:845
#8  0x080c7ef7 in xf86SigioReadInput (fd=17, closure=0x9251898) at 
#9  0x080b87b4 in xf86SIGIO (sig=29) at 
#10 <signal handler called>
#11 _int_free (av=<value optimized out>, p=0x93f7230) at malloc.c:4831
#12 0x001cb79d in *__GI___libc_free (mem=0x93f7238) at malloc.c:3716
#13 0x08137a21 in Xfree (ptr=0x0) at ../../os/utils.c:1165
#14 0x08120cb4 in miRegionDestroy (pReg=0x93f7238) at ../../mi/miregion.c:258
#15 0x0816f126 in miDestroyPicture (pPicture=0x92fa040) at ../../render/mipict.c:50
#16 0x08171b6d in FreePicture (value=0x92fa040, pid=23101378) at 
#17 0x08074e82 in FreeResource (id=23101378, skipDeleteFuncType=0) at 
#18 0x08179722 in ProcRenderFreePicture (client=0x92978e0) at 
#19 0x081742e5 in ProcRenderDispatch (client=0x29d3a0) at ../../render/render.c:2089
#20 0x0808d17f in Dispatch () at ../../dix/dispatch.c:456
#21 0x08072515 in main (argc=5, argv=0xbfed81a4, envp=0xbfed81bc) at 

More information about the xorg-devel mailing list