Keith Whitwell wrote:
> On Tue, 2009-03-17 at 03:56 -0700, José Fonseca wrote:
>   
>> On Tue, 2009-03-17 at 03:39 -0700, Thomas Hellstrom wrote:
>>     
>>> Thomas Hellström wrote:
>>>       
>>>> Hi!
>>>>
>>>> I'm currently looking into the thread-safety of the dri drivers. In 
>>>> particular the calls to libX11.
>>>>
>>>> It appears that many of the applications I've tried have issues with 
>>>> deadlocks in the XCB code.
>>>> It looks like this might be an issue with the locking order of 
>>>> XLockDisplay() and driver mutexes.
>>>>
>>>> In particular, if the application protects all glx calls with 
>>>> XLockDisplay() the driver might deadlock in a normal GL call:
>>>>
>>>> Thread A:
>>>> XLockDisplay() -> glxXXX -> driver mutex -> Xlib call -> Xcb 
>>>> XLockdisplay().
>>>> Thread B
>>>> Normal GL call -> driver mutex -> Xlib call -> Xcb XLockDisplay().
>>>>
>>>> So we have a locking order reversal between the driver mutex and 
>>>> XLockDisplay which causes a deadlock.
>>>>
>>>> Now, it seems like a simple away around this would be to omit the 
>>>> application XLockDisplays() completely. However, that seems to cause 
>>>> issues with XPending and XNextEvent eating the reply data meant for 
>>>> XSync(), leaving XSync waiting locked in a select().
>>>>
>>>> I guess the remedy is to have the DRI utility routines and drivers 
>>>> protect _all_ X calls with XLockDisplay().
>>>>
>>>> Does anyone have thoughts / insights about this?
>>>>
>>>> Thanks,
>>>> Thomas
>>>>
>>>>
>>>>   
>>>>         
>>> Hmm,
>>> I installed a non-XCB Xlib and all problems just vanished...
>>> Don't mind the above.
>>>       
>> So is this a XCB problem?
>>     
>
> XCB is pretty much the default now & given that it was supposed to
> resolve the threading issues with old Xlib, I don't think that this
> means the issue goes away...  
>
> Keith
>
>   
Yes, as far as I can tell, this is an xcb problem, and it should pretty 
much affect all our drivers.

I guess this needs to be fixed asap. I'll see if I can come up with a 
non-GL X app that reproduces the problem.
Basically it should show up if the main thread is running a loop that 
calls XNextEvent(), while other threads are calling  XSync / 
XGetGeometry() on windows.

/Thomas


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to