[Xquartz-dev] keyboard/mouse focus issues

Pelle Johansson pelle at morth.org
Sat Oct 17 01:04:46 PDT 2009


Yeah, sorry I wasn't more clear. It's at the second backtrace below  
that dev->deviceGrab.sync.other is written to which in turn causes  
FreezeThaw to freeze the events (CheckGrabForSyncs calls  
ComputeFreezes at the end). Where it's supposed to be cleared I don't  
know.

I'll see if I have time to get a -O0 server compiled this weekend,  
obviously otherMode can't really be 0 there it has to be an  
optimization thing, and there's some inlined frames missing. But I'm  
pretty full booked...
-- 
Pelle Johansson

17 okt 2009 kl. 01.42 skrev Jeremy Huddleston:

> Well, FWICT, the problem stems from the device being marked as  
> "frozen" and never getting "thawed" ...
>
> look at FreezeThaw in dix/events.c
>
> you might want to break in that function when frozen=TRUE (break  
> FreezeThaw if frozen != 0).
>
> It's a small static function and might be inlined by gcc  
> optimizations, so I'd recommend building the server with "-O0 - 
> ggdb3" (which is good measure whenever using gdb any ways).
>
>
>
> On Oct 16, 2009, at 15:22, Pelle Johansson wrote:
>
>> No problem, I want it fixed as much as anyone. FWIW I've tracked it  
>> down (using watch points, of all things. nice to see them finally  
>> working) to this backtrace:
>>
>> #0  0x00000001000dc731 in AddPassiveGrabToList ()
>> #1  0x00000001000d020c in ProcGrabButton (client=0x1007df330) at  
>> events.c:5176
>> #2  0x00000001000cbaf4 in Dispatch ()
>> #3  0x00000001000ddc41 in dix_main ()
>> #4  0x0000000100013f52 in server_thread ()
>> #5  0x00007fff86aeaf66 in _pthread_start ()
>> #6  0x00007fff86aeae19 in thread_start ()
>>
>> The passive grab added there is never removed (until the window is  
>> unmapped), and it's the one making events queue up when the X  
>> server is switched to. The client calling Grab is always the same  
>> for the lifetime of the server, the wm maybe?
>>
>> It is used here:
>> #0  0x00000001000d74b4 in CheckGrabForSyncs (thisDev=<value  
>> temporarily unavailable, due to optimizations>, thisMode=<value  
>> temporarily unavailable, due to optimizations>, otherMode=0) at  
>> events.c:1474
>> #1  0x00000001000d4331 in CheckPassiveGrabsOnWindow (pWin=<value  
>> temporarily unavailable, due to optimizations>, device=0x1007e0a70,  
>> xE=0x114452bd0, count=1, store=0x11581cb90, scount=2) at events.c: 
>> 3338
>> #2  0x00000001000d4711 in CheckDeviceGrabs (device=0x1007e0a70,  
>> xE=0x11581cb90, checkFirst=0, count=2) at events.c:3445
>> #3  0x0000000100081b2c in ProcessOtherEvent (xE=0x11581cb90,  
>> device=0x1007e0a70, count=2) at exevents.c:1059
>> #4  0x000000010009fed0 in ProcessPointerEvent ()
>> #5  0x00000001000fa0c4 in mieqProcessInputEvents () at mieq.c:476
>> #6  0x000000010000e965 in ProcessInputEvents ()
>> #7  0x00000001000cb70b in Dispatch ()
>> #8  0x00000001000ddc41 in dix_main ()
>> #9  0x0000000100013f52 in server_thread ()
>> #10 0x00007fff86aeaf66 in _pthread_start ()
>> #11 0x00007fff86aeae19 in thread_start ()



More information about the Xquartz-dev mailing list