xfree86: compat: re-export MarkClientException() for horryibly maintained Nvidia

NVidia yet again doing crazy shit in their proprietary drivers:

This is an DIX-*internal* function for triggering client teardown when
connection broke or somehow lack of resources to accept new connections.
Video drivers have no business with that whatsoever - having them messing
with client client connections is just insane.

But still trying to be kind with Nvidia victims, thus adding a little wrapper
function under the old name. It spills out a log warning calling users to file
bug reports their driver vendor.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-06-02 17:34:25 +02:00
parent 0b9a2fc6b0
commit f25bf57cc2
2 changed files with 26 additions and 0 deletions

View File

@ -0,0 +1,24 @@
#include <dix-config.h>
#include <X11/Xfuncproto.h>
#include "dix/dix_priv.h"
/*
* this is specifically for NVidia proprietary driver: they're again lagging
* behind a year, doing at least some minimal cleanup of their code base.
* All attempts to get in direct contact with them have failed.
*/
_X_EXPORT void MarkClientException(ClientPtr pClient);
void MarkClientException(ClientPtr pClient)
{
LogMessageVerb(X_WARNING, 0, "Bogus driver calling DIX-internal function MarkClientException() !\n");
LogMessageVerb(X_WARNING, 0, "External drivers really should never ever call this function.\n");
LogMessageVerb(X_WARNING, 0, "Nor should they ever DIX-internal fields like ClientRec->noClientException\n");
LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n");
LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n");
LogMessageVerb(X_WARNING, 0, "And just don't buy Nvidia hardware, ever.\n");
dixMarkClientException(pClient);
}

View File

@ -1,8 +1,10 @@
srcs_xorg_compat = [ srcs_xorg_compat = [
'clientexception.c',
'log.c', 'log.c',
] ]
xorg_compat = static_library('xorg_compat', xorg_compat = static_library('xorg_compat',
srcs_xorg_compat, srcs_xorg_compat,
dependencies: common_dep,
include_directories: [inc, xorg_inc, top_dir_inc], include_directories: [inc, xorg_inc, top_dir_inc],
) )