svga: fix memory leak in svga_clear_texture()
authorNeha Bhende <bhenden@vmware.com>
Fri, 28 Oct 2016 18:29:11 +0000 (11:29 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 3 Nov 2016 20:29:22 +0000 (14:29 -0600)
Piglit tests which uses arb_clear_texture extension, have memory leak issue.
pipe_surface created in svga_clear_texture() was not deleted which happens to be
the cause for memory leak.

tested all arb_clear_texture-* piglit tests with valgrid.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/drivers/svga/svga_pipe_clear.c

index 803afc60ff8098d0bab2e5342776ef4d95541c95..56db713cfc95c419eabc30ba506733348e76496a 100644 (file)
@@ -323,8 +323,10 @@ svga_clear_texture(struct pipe_context *pipe,
       struct pipe_surface *dsv =
          svga_validate_surface_view(svga, svga_surface_dst);
 
-      if (!dsv)
+      if (!dsv) {
+         pipe_surface_reference(&surface, NULL);
          return;
+      }
 
       if (box->x == 0 && box->y == 0 && box->width == surface->width &&
           box->height == surface->height) {
@@ -382,8 +384,10 @@ svga_clear_texture(struct pipe_context *pipe,
       struct pipe_surface *rtv =
          svga_validate_surface_view(svga, svga_surface_dst);
 
-      if (!rtv)
+      if (!rtv) {
+         pipe_surface_reference(&surface, NULL);
          return;
+      }
 
       if (box->x == 0 && box->y == 0 && box->width == surface->width &&
           box->height == surface->height) {
@@ -449,6 +453,7 @@ svga_clear_texture(struct pipe_context *pipe,
          }
       }
    }
+   pipe_surface_reference(&surface, NULL);
 }
 
 /**