jbarnes at virtuousgeek.org
Mon Jun 28 15:27:55 PDT 2010
In GL code, we have two subsystems using IgnoreClient these days: GLX
GLX uses it to suspend clients while the server is VT switched away
(not sure why, maybe some drivers can't handle it?).
DRI2 uses it to implement swap throttling and various GLX extensions
and DRI2 protocol requests.
Unfortunately the two don't work together. What I'm seeing is this:
1) client gets throttled in DRI2 due to an outstanding set of
swaps pending (DRI2ThrottleClient from one of the DRI2 proto
requests). IgnoredClientsWithInput should be set with the client
fd at this point.
2) server is VT switched away
3) GLX code suspends all GLX clients using IgnoreClient. At this
point, IgnoredClientsWithInput is cleared of the client fd.
Then when we VT switch back to the server, the suspended client's fd is
never serviced, because its input status was lost.
IgnoreClient is fairly ancient though, so there's probably some reason
for the "clear IgnoredClientsWithInput" behavior. Any suggestions on
how to solve it? Fixing this issue fixes bug #27035.
Maybe we could clear it in AttendClient instead, after copying it over
to ClientsWithInput? Seems like losing it is the wrong thing to do...
Jesse Barnes, Intel Open Source Technology Center
More information about the xorg-devel