diff --git a/glx/glxext.c b/glx/glxext.c index f1355ce31..46ff19236 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -56,6 +56,7 @@ RESTYPE __glXContextRes; RESTYPE __glXDrawableRes; static DevPrivateKeyRec glxClientPrivateKeyRec; +static GlxServerVendor *glvnd_vendor = NULL; #define glxClientPrivateKey (&glxClientPrivateKeyRec) @@ -317,6 +318,10 @@ GetGLXDrawableBytes(void *value, XID id, ResourceSizePtr size) static void xorgGlxCloseExtension(const ExtensionEntry *extEntry) { + if (glvnd_vendor != NULL) { + glxServer.destroyVendor(glvnd_vendor); + glvnd_vendor = NULL; + } lastGLContext = NULL; } @@ -497,11 +502,9 @@ xorgGlxServerPreInit(const ExtensionEntry *extEntry) return glxGeneration == serverGeneration; } -static GlxServerVendor * +static void xorgGlxInitGLVNDVendor(void) { - static GlxServerVendor *glvnd_vendor = NULL; - if (glvnd_vendor == NULL) { GlxServerImports *imports = NULL; imports = glxServer.allocateServerImports(); @@ -515,13 +518,11 @@ xorgGlxInitGLVNDVendor(void) glxServer.freeServerImports(imports); } } - return glvnd_vendor; } static void xorgGlxServerInit(CallbackListPtr *pcbl, void *param, void *ext) { - GlxServerVendor *glvnd_vendor; const ExtensionEntry *extEntry = ext; int i; @@ -529,7 +530,7 @@ xorgGlxServerInit(CallbackListPtr *pcbl, void *param, void *ext) return; } - glvnd_vendor = xorgGlxInitGLVNDVendor(); + xorgGlxInitGLVNDVendor(); if (!glvnd_vendor) { return; }