From: Tilman S. <ti...@co...> - 2006-07-28 21:52:00
|
Michel D=E4nzer [2006-07-28 13:40]: > On Thu, 2006-07-27 at 22:08 +0200, Tilman Sauerbeck wrote: > >=20 > > Any idea what's wrong with the locking here? >=20 > IIRC it's due to locking oddities in the mga DRI driver, I'm sure > Kristian knows more about it. Yeah, he told me that ajax looked into the problem, but he has been unresponsive so far ;) > > Hints on when DRIDoBlockHandler is called or why it can be called even > > though the DRI lock isn't held are appreciated :) >=20 > Are you familiar with the X server's function wrapping mechanism? > DRI(Do)BlockHandler() is the DRI module's wrapper of the X server's > BlockHandler screen hook, which it calls whenever it has run out of > requests and goes to sleep for a bit. For symmetry, there's a DRILock() > call in DRIDoWakeupHandler(), which is a wrapper for the hook the X > server calls before it starts processing new requests. The idea is for > the DRI module to automatically hold the lock whenever the X server > might need hardware access. I should have asked a more specific question. While DRIBlockHandler() was called all the time, DRIDoBlockHandler() was only called once, which led to the bad DRIUnlock() call. I wanted to know when DRI_Do_BlockHandler() is called :) Looking at the code again, it seems DRIDoWakeupHandler() and DRIDoBlockHandler() are the base functions for the job, which may be overridden by the DDX driver. MGA overrides both in MGADRIScreenInit(). So the only place that could call DRIDoBlockHandler() is xserver/GL/glx/glxdri.c, in __glXDRIleaveServer(). I'll have a look at that code and see what I can find out. Thanks, Tilman --=20 A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing? A: Top-posting. Q: What is the most annoying thing on usenet and in e-mail? |