diff options
-rw-r--r-- | src/glx/x11/dri_glx.c | 8 | ||||
-rw-r--r-- | src/glx/x11/glxclient.h | 1 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/glx/x11/dri_glx.c b/src/glx/x11/dri_glx.c index c02f105611c..9c3a78b31b7 100644 --- a/src/glx/x11/dri_glx.c +++ b/src/glx/x11/dri_glx.c @@ -194,7 +194,8 @@ static __DRIdriver *OpenDriver(const char *driverName) /* First, search Drivers list to see if we've already opened this driver */ for (driver = Drivers; driver; driver = driver->next) { if (strcmp(driver->name, driverName) == 0) { - /* found it */ + /* found it, increment library refcount & return */ + dlopen(driver->libpath, RTLD_NOW | RTLD_GLOBAL); return driver; } } @@ -238,7 +239,9 @@ static __DRIdriver *OpenDriver(const char *driverName) break; /* out of memory! */ /* init the struct */ driver->name = __glXstrdup(driverName); - if (!driver->name) { + driver->libpath = __glXstrdup(realDriverName); + if (!driver->name || !driver->libpath) { + if (driver->name) XFree(driver->name); Xfree(driver); driver = NULL; break; /* out of memory! */ @@ -401,6 +404,7 @@ static void driDestroyDisplay(Display *dpy, void *private) Drivers = driver->next; Xfree(driver->name); + Xfree(driver->libpath); Xfree(driver); break; } diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h index 05354073c45..7054f3cc310 100644 --- a/src/glx/x11/glxclient.h +++ b/src/glx/x11/glxclient.h @@ -117,6 +117,7 @@ struct __DRIdisplayRec { */ struct __DRIdriverRec { const char *name; + const char *libpath; void *handle; PFNCREATENEWSCREENFUNC createNewScreenFunc; struct __DRIdriverRec *next; |