Spinning in _XReply
Karl Tomlinson
xmail at karlt.net
Tue Mar 15 18:40:01 PDT 2011
Jamey Sharp writes:
> So I don't see anything we can do except require that callers meet the
> documented requirements for XSetErrorHandler. I did try to find a kludge
> to let existing apps survive this bug, but anything I could think of
> probably breaks multi-threaded clients.
Thanks for the follow-up. I'm happy to fix our client to avoid
protocol requests on the display passed to XSetErrorHandler.
(Life must be difficult for multi-threaded clients using
XSetErrorHandler, but I imagine there are ways to make things work.)
> On Wed, Feb 23, 2011 at 10:26:21AM +1300, xmail at karlt.net wrote:
>> The information we want is already on display->ext_procs->codes
>> but "This structure is private to the library." I'm not aware of
>> a public API to get this information from Xlib.
>
> Eh, that hasn't stopped anyone else who's using Xlib. :-/
>
> One thing you could do if you don't want to use private APIs is to call
> XListExtensions (and XQueryExtension, if you need event and error
> numbers) when you open the Display.
We usually try to do as little as possible on start-up.
This may not take much time, but little things add up.
> Otherwise, screw it, I'd just include Xlibint.h and dig out
> ext_procs->codes.
I feel more comfortable opening another connection. The
consequences are less severe if codes ever change than if
structures change.
> On Fri, Mar 04, 2011 at 12:20:12PM +1300, Karl Tomlinson wrote:
>> > http://lists.x.org/archives/xorg-devel/2011-February/019533.html
>> > does seem to indicate another potential issue (breaking from the
>> > loop only when "req == current"). I guess that hasn't bitten us
>> > because we don't return to the first _XReply.
>>
>> That seems to have been the situation until
>> http://cgit.freedesktop.org/xorg/lib/libX11/commit/?id=933aee1d5c53b0cc7d608011a29188b594c8d70b
>>
>> I see that we now spin even without XInitThreads.
>> That is version 1.3.4 --with-xcb.
>
> I'm not sure what this means. Do you mean you spin due to re-entering
> _XReply from _XError, or because of something involving the "req ==
> current" condition?
Re-entering _XReply from _XError, which we'll avoid.
> With the patch I just pushed, I think calling XSynchronize should once
> again be safe from an error handler.
Yes, that's my understanding too.
That's helpful, thank you.
More information about the xorg-devel
mailing list