reentrancy of mieqProcessInputEvents()?

Jeremy Huddleston jeremyhu at apple.com
Fri Jun 15 00:49:21 PDT 2012


On Jun 12, 2012, at 5:48 PM, Peter Hutterer <peter.hutterer at who-t.net> wrote:

> On Tue, Jun 12, 2012 at 05:11:49PM -0700, Andy Ritger wrote:
>> ...

>> Making the 'event' variable in mieqProcessInputEvents() non-static
>> avoids the FatalError() in FixKeyState(), but is it problematic to
>> have the re-entered instance of mieqProcessInputEvents() process events
>> from miEventQueue before the first instance of mieqProcessInputEvents()
>> has completed processing of its current event?
> 
> good analysis, thanks.  afaict we need a mutex in
> mieqProcessInputEvents(), it's certainly not designed to be reentrant and
> it's pointless anyway - if you're already processing events, why would you
> need to do so again?

FWIW, XQuartz does have a mutex in mieqProcessInputEvents, and I haven't had any reports of deadlock, so my guess is that DIX doesn't re-enter mieqProcessInputEvents for most cases.  This UpdateCurrentTime() case is certainly worrisome.

Should RRTellChanged be calling UpdateCurrentTimeIf() instead of UpdateCurrentTime()?

Is there a way we can make this API more robust rather than just adding assertions to the implementation?  For example, why does UpdateCurrentTime need to ProcessInputEvents?



More information about the xorg-devel mailing list