mieqProcessDeviceEvent make calls to mieqEnque with signals enabled - freezes Xorg server - multi-screen

Donald Kayser xorg at kayser.net
Tue May 17 13:34:22 PDT 2011

I am developing a system that include's the debian/squeeze  
distribution of xorg-server, version 1.7.7. I have come across a  
scenario where mouse movements on one screen and a touch on another  
screen will cause the Xorg process to freeze in an infinite loop in  
the function mieqProcessInputEvents(). I have traced the problem down  
to a small window during which a call to mieqProcessDeviceEvent can be  
interrupted by a signal and mess up the miEventQueue.head and tail. It  
appears that in some place in this stack a new event is being enqueued  
while the screen is changing and device messages get swapped to the  
wrong screen and back and forth.

I put a global variable in mieqProcessDeviceEvent to indicate to  
mieqEnqueue to ignore data until finished. This has solved the problem  
as a test. I am now writing the code to ignore the SIGIO signal during  
mieqProcessDeviceEvent and test this approach also.

Does anyone have a similar problem or advice?

Donald Kayser
xorg at kayser dot net

More information about the xorg mailing list