Mesa (master): glx: load dri driver with RTLD_LOCAL so dlclose never fails to unload

Adam Jackson ajax at kemper.freedesktop.org
Thu May 29 17:34:41 UTC 2014


Module: Mesa
Branch: master
Commit: e3cc0d90e14e62a0a787b6c07a6df0f5c84039be
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3cc0d90e14e62a0a787b6c07a6df0f5c84039be

Author: Jerome Glisse <jglisse at redhat.com>
Date:   Thu May 29 13:32:21 2014 -0400

glx: load dri driver with RTLD_LOCAL so dlclose never fails to unload

There is no reason anymore to load with RTLD_GLOBAL and for some driver
this even result in dlclose failing to unload leading to catastrophic
failure with swrast fallback.

Cc: "10.1 10.2" <mesa-stable at lists.freedesktop.org>
Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Signed-off-by: Jérôme Glisse <jglisse at redhat.com>

---

 src/glx/dri_common.c |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
index 8bf4705..e5a3f70 100644
--- a/src/glx/dri_common.c
+++ b/src/glx/dri_common.c
@@ -45,8 +45,8 @@
 #ifndef RTLD_NOW
 #define RTLD_NOW 0
 #endif
-#ifndef RTLD_GLOBAL
-#define RTLD_GLOBAL 0
+#ifndef RTLD_LOCAL
+#define RTLD_LOCAL 0
 #endif
 
 _X_HIDDEN void
@@ -99,7 +99,7 @@ driOpenDriver(const char *driverName)
    int len;
 
    /* Attempt to make sure libGL symbols will be visible to the driver */
-   glhandle = dlopen("libGL.so.1", RTLD_NOW | RTLD_GLOBAL);
+   glhandle = dlopen("libGL.so.1", RTLD_NOW | RTLD_LOCAL);
 
    libPaths = NULL;
    if (geteuid() == getuid()) {
@@ -127,14 +127,14 @@ driOpenDriver(const char *driverName)
       snprintf(realDriverName, sizeof realDriverName,
                "%.*s/tls/%s_dri.so", len, p, driverName);
       InfoMessageF("OpenDriver: trying %s\n", realDriverName);
-      handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
+      handle = dlopen(realDriverName, RTLD_NOW | RTLD_LOCAL);
 #endif
 
       if (handle == NULL) {
          snprintf(realDriverName, sizeof realDriverName,
                   "%.*s/%s_dri.so", len, p, driverName);
          InfoMessageF("OpenDriver: trying %s\n", realDriverName);
-         handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
+         handle = dlopen(realDriverName, RTLD_NOW | RTLD_LOCAL);
       }
 
       if (handle != NULL)




More information about the mesa-commit mailing list