This bug has been reported in the Debian BTS 6 years ago and is still in Xorg 7.1 (and will be in 7.2 from what I see in the source).
XF86DGAGetVideo() registers XF86cleanup() with atexit. XF86cleanup() uses _exit(3). It causes all atexit callbacks that were registered before XF86cleanup() to not be called. The code has been kind of the same since 1995. I would suggests not calling _exit() from XF86cleanup, and just returning instead. The signal handler needs to cleanup things before exiting, but calling exit(), which will call the atexit() callbacks. All this code is still kind of dirty, but this change seems to fix the bug.
Created attachment 8545 [details] [review]
Patch to stop calling _exit() from the atexit() callback
Sorry about the phenomenal bug spam, guys. Adding xorg-team@ to the QA contact so bugs don't get lost in future.
This is utterly amazingly bonged.
I'm really not comfortable with fixing the client lib until the server can actually clean up from DGA client death sensibly. Which is not to say we shouldn't fix this, just that the client fix on its own isn't okay.
On Mon, Mar 24, 2008 at 01:43:30PM -0700, email@example.com wrote:
> This is utterly amazingly bonged.
> I'm really not comfortable with fixing the client lib until the server can
> actually clean up from DGA client death sensibly. Which is not to say we
> shouldn't fix this, just that the client fix on its own isn't okay.
Any reason in particular to fix DGA instead of burning DGA and fixing
Moving to 7.5, whatever. DGA users lose anyway, maybe by then we'll have a replacement.
dga is dead dead dead!