glx: Fix indirect screen initialization
authorKristian Høgsberg <krh@bitplanet.net>
Fri, 23 Jul 2010 12:32:25 +0000 (08:32 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Sat, 24 Jul 2010 02:05:53 +0000 (22:05 -0400)
https://bugs.freedesktop.org/show_bug.cgi?id=29225

src/glx/glxext.c

index 97149dff7022900c5f21bf18e79ffd0660605026..324230f5e3e3b1b516aefb585e267864d0c2e9ba 100644 (file)
@@ -739,12 +739,16 @@ glx_screen_init(__GLXscreenConfigs *psc,
 }
 
 static __GLXscreenConfigs *
-createIndirectScreen()
+createIndirectScreen(int screen, __GLXdisplayPrivate * priv)
 {
    __GLXscreenConfigs *psc;
 
    psc = Xmalloc(sizeof *psc);
+   if (psc == NULL)
+      return NULL;
+
    memset(psc, 0, sizeof *psc);
+   glx_screen_init(psc, screen, priv);
 
    return psc;
 }
@@ -775,6 +779,7 @@ AllocAndFetchScreenConfigs(Display * dpy, __GLXdisplayPrivate * priv)
    }
 
    for (i = 0; i < screens; i++, psc++) {
+      psc = NULL;
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
       if (priv->dri2Display)
         psc = (*priv->dri2Display->createScreen) (i, priv);
@@ -782,9 +787,9 @@ AllocAndFetchScreenConfigs(Display * dpy, __GLXdisplayPrivate * priv)
         psc = (*priv->driDisplay->createScreen) (i, priv);
       if (psc == NULL && priv->driswDisplay)
         psc = (*priv->driswDisplay->createScreen) (i, priv);
+#endif
       if (psc == NULL)
         psc = createIndirectScreen (i, priv);
-#endif
       priv->screenConfigs[i] = psc;
    }
    SyncHandle();