<div dir="ltr"><div>Bah, meant to reply all here.</div><div><br></div><div>- ajax</div><div><br></div><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <b class="gmail_sendername" dir="auto">Adam Jackson</b> <span dir="auto"><<a href="mailto:ajax@redhat.com">ajax@redhat.com</a>></span><br>Date: Mon, Oct 31, 2022 at 12:29 PM<br>Subject: Re: XInitThreads in library constructor breaks Motif!<br>To: Po Lu <<a href="mailto:Luangruo@yahoo.com">Luangruo@yahoo.com</a>><br></div><div dir="ltr"><div dir="ltr"></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Oct 30, 2022 at 8:10 PM Po Lu <<a href="mailto:Luangruo@yahoo.com" target="_blank">Luangruo@yahoo.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Or most people are on Xlib 1.7.x.  Anyway, the documentation for X*IfEvent says it is okay to call functions that take the display lock inside the predicate given that it does not change the event queue.  I have written such software, and clearly the Open Group has too, along with XFCE, etc.<br></blockquote><div><br></div><div>The documentation absolutely does not say that. The manual page says "Your predicate procedure must decide if the event is useful without calling any Xlib functions". Taking the display lock is an xlib function. It also clearly _calls out_ a case where behavior will _definitely_ be undefined, but the "do not re-enter xlib" restriction is not limited to "do not use xlib to touch the event queue".<br></div></div><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Besides, how to move it forward? If it works, wouldn't the obvious solution be to install the change? If all that is needed is for someone to try it out, I'd be happy to do it, but I'm pretty sure the better solution is just to remove the call to XInitThreads in the first place.<br></blockquote><div><br></div><div>No. xlib needs to be thread safe in order for other libraries and apps to use xcb reliably. The socket handoff mechanism between xcb and xlib _cannot work safely_ unless the xlib display is thread safe. It will only be thread-safe if XInitThreads was called before XOpenDisplay. The xcb-using component cannot possibly enforce that because the xcb connection is created by xlib, so (for example) libGL would be left with no other option than to refuse to work on non-thread-safe displays.</div> <div>- ajax<br></div></div></div>
</div></div></div>