[PATCH libX11] _XDefaultError: set XlibDisplayIOError flag before calling exit
Arthur Huillet
arthur.huillet at free.fr
Tue Feb 21 16:16:41 UTC 2017
With Jamey's review and Julien's questions answered, would someone
please push that change to libX11, unless there are objections to the
patch?
Thank you
--
A. Huillet
On 2017-02-02 9:45, Arthur Huillet wrote:
> On Thu, 2 Feb 2017 09:05:03 +0100
> Julien Cristau <jcristau at debian.org> wrote:
>
>> On Wed, Feb 1, 2017 at 15:02:41 +0100, arthur.huillet at free.fr wrote:
>>
>> > It is legal for an application to make Xlib calls during _fini, and that is useful for an OpenGL driver to avoid resource leaks on the X server side, for example in the dlopen/dlclose case. However, the driver can not readily tell whether its _fini is being called because Xlib called exit, or for another reason (dlclose), so it is hard to cleanly work around this issue in the driver.
>> >
>> I don't get the resource leaks justification. Can't the X server
>> clean
>> up when the client goes away?
>
> My change is safe precisely because of that: when the client goes
> away, that is, when the display connection dies, the X server will
> clean up correctly. Therefore it doesn't matter if Xlib went into
> "no-op" mode when it called exit.
> However, _fini is also called for the hairy case of dlclose(). If an
> application loads the OpenGL driver with dlopen(), and closes it with
> dlclose(), then its display connection is likely still alive and not
> dying, in which case the X server will not clean up correctly.
> Quake3 used to be known as one of the applications that did that. It
> would dlclose then dlopen again the driver whenever some video
> parameters were changed in the menu.
>
> This is a strange use case, but it's legal, and isn't becoming less
> relevant with glvnd (thanks to which the driver is now *always* loaded
> via dlopen). glvnd would theoretically be free to call dlclose if it
> fancies that, although I'm not aware that it does it at this point. I
> also seem to remember seeing dlclose called by the Vulkan loader.
>
> Generally speaking it's difficult for a driver to handle resource
> cleanups with threads, forks, and dlclose. Unfortunately all these
> happen in the wild, usually together (at least in our internal stress
> tests), so we have to "support" them.
More information about the xorg-devel
mailing list