st/egl: Plug pbuffer leaks.
authorChia-I Wu <olv@lunarg.com>
Wed, 22 Dec 2010 05:59:58 +0000 (13:59 +0800)
committerChia-I Wu <olv@lunarg.com>
Wed, 22 Dec 2010 06:12:33 +0000 (14:12 +0800)
Unreference validated resources or remove unnecessary validations.

src/gallium/state_trackers/egl/common/egl_g3d_api.c

index aeabccfaf185ea09b47ee9a64de36507a0e93439..07ea6dc8b9989c3acd4ad1c78b2e33e883d04b13 100644 (file)
@@ -403,7 +403,6 @@ egl_g3d_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *dpy,
                                _EGLConfig *conf, const EGLint *attribs)
 {
    struct egl_g3d_surface *gsurf;
-   struct pipe_resource *ptex = NULL;
 
    gsurf = create_pbuffer_surface(dpy, conf, attribs,
          "eglCreatePbufferSurface");
@@ -412,13 +411,6 @@ egl_g3d_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *dpy,
 
    gsurf->client_buffer_type = EGL_NONE;
 
-   if (!gsurf->stfbi->validate(gsurf->stfbi,
-            &gsurf->stvis.render_buffer, 1, &ptex)) {
-      egl_g3d_destroy_st_framebuffer(gsurf->stfbi);
-      FREE(gsurf);
-      return NULL;
-   }
-
    return &gsurf->base;
 }
 
@@ -478,12 +470,14 @@ egl_g3d_create_pbuffer_from_client_buffer(_EGLDriver *drv, _EGLDisplay *dpy,
    gsurf->client_buffer_type = buftype;
    gsurf->client_buffer = buffer;
 
+   /* validate now so that it fails if the client buffer is invalid */
    if (!gsurf->stfbi->validate(gsurf->stfbi,
             &gsurf->stvis.render_buffer, 1, &ptex)) {
       egl_g3d_destroy_st_framebuffer(gsurf->stfbi);
       FREE(gsurf);
       return NULL;
    }
+   pipe_resource_reference(&ptex, NULL);
 
    return &gsurf->base;
 }