From 8669a87f056ce7c9bf488131861185b222d9cbbd Mon Sep 17 00:00:00 2001 From: M Stoeckl Date: Tue, 14 Jul 2020 21:13:27 -0400 Subject: [PATCH] Reuse X11 connection from availability check Instead of creating an X11 connection to test that X11 is available, closing the connection, and then reconnecting for real, use the same connection to handle both cases. The X11 connection retry delay mechanism in the case where X11 is dynamically loaded has been removed. It was only necessary to avoid authetnication token reuse from the XOpenDisplay call that used to exist in X11_Available. Now that this call is only made once, it is no longer needed. Also drop unused and inapplicable code from a comment. *** --- src/video/x11/SDL_x11video.c | 56 +++++++----------------------------- 1 file changed, 10 insertions(+), 46 deletions(-) diff --git a/src/video/x11/SDL_x11video.c b/src/video/x11/SDL_x11video.c index ecb638179..8ae4b6cb6 100644 --- a/src/video/x11/SDL_x11video.c +++ b/src/video/x11/SDL_x11video.c @@ -92,20 +92,6 @@ get_classname() /* X11 driver bootstrap functions */ -static int -X11_Available(void) -{ - Display *display = NULL; - if (SDL_X11_LoadSymbols()) { - display = X11_XOpenDisplay(NULL); - if (display != NULL) { - X11_XCloseDisplay(display); - } - SDL_X11_UnloadSymbols(); - } - return (display != NULL); -} - static void X11_DeleteDevice(SDL_VideoDevice * device) { @@ -159,10 +145,7 @@ X11_CreateDevice(int devindex) SDL_VideoDevice *device; SDL_VideoData *data; const char *display = NULL; /* Use the DISPLAY environment variable */ - - if (!X11_Available()) { - return NULL; - } + Display *x11_display = NULL; if (!SDL_X11_LoadSymbols()) { return NULL; @@ -172,6 +155,14 @@ X11_CreateDevice(int devindex) nVidia driver to be threaded. */ X11_XInitThreads(); + /* Open the display first to be sure that X11 is available */ + x11_display = X11_XOpenDisplay(display); + + if (!x11_display) { + SDL_X11_UnloadSymbols(); + return NULL; + } + /* Initialize all variables that we clean on shutdown */ device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); if (!device) { @@ -188,34 +179,7 @@ X11_CreateDevice(int devindex) data->global_mouse_changed = SDL_TRUE; - /* FIXME: Do we need this? - if ( (SDL_strncmp(X11_XDisplayName(display), ":", 1) == 0) || - (SDL_strncmp(X11_XDisplayName(display), "unix:", 5) == 0) ) { - local_X11 = 1; - } else { - local_X11 = 0; - } - */ - data->display = X11_XOpenDisplay(display); -#ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC - /* On some systems if linking without -lX11, it fails and you get following message. - * Xlib: connection to ":0.0" refused by server - * Xlib: XDM authorization key matches an existing client! - * - * It succeeds if retrying 1 second later - * or if running xhost +localhost on shell. - */ - if (data->display == NULL) { - SDL_Delay(1000); - data->display = X11_XOpenDisplay(display); - } -#endif - if (data->display == NULL) { - SDL_free(device->driverdata); - SDL_free(device); - SDL_SetError("Couldn't open X11 display"); - return NULL; - } + data->display = x11_display; #ifdef X11_DEBUG X11_XSynchronize(data->display, True); #endif