Mesa (master): svga: Fix resource leak; undo temporary workaround.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Thu Feb 3 16:15:03 UTC 2011


Module: Mesa
Branch: master
Commit: 610c24b19d21f3d147fde4d96a3afaa107670f1e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=610c24b19d21f3d147fde4d96a3afaa107670f1e

Author: José Fonseca <jfonseca at vmware.com>
Date:   Thu Feb  3 16:14:02 2011 +0000

svga: Fix resource leak; undo temporary workaround.

Leak was introduced when fixing strict aliasing violation in this code:
the reference counting was preserved, but the destructor call on zero
reference count was not.

---

 src/gallium/drivers/svga/svga_draw.c               |    7 -------
 .../drivers/svga/svga_resource_buffer_upload.c     |    7 ++++---
 2 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_draw.c b/src/gallium/drivers/svga/svga_draw.c
index 051ac1c..2c873a0 100644
--- a/src/gallium/drivers/svga/svga_draw.c
+++ b/src/gallium/drivers/svga/svga_draw.c
@@ -224,13 +224,6 @@ svga_hwtnl_flush( struct svga_hwtnl *hwtnl )
       hwtnl->cmd.prim_count = 0;
    }
 
-   /*
-    * FIXME:  Somehow we are accumulating too many buffer uploads without
-    * flushing, so temporarily disable buffer upload coalescing to prevent OOM
-    * crashes (at expense of less performance).
-    */
-   svga_context_flush_buffers(svga);
-
    return PIPE_OK;
 }
 
diff --git a/src/gallium/drivers/svga/svga_resource_buffer_upload.c b/src/gallium/drivers/svga/svga_resource_buffer_upload.c
index 3de5216..765d2f3 100644
--- a/src/gallium/drivers/svga/svga_resource_buffer_upload.c
+++ b/src/gallium/drivers/svga/svga_resource_buffer_upload.c
@@ -248,6 +248,7 @@ svga_buffer_upload_flush(struct svga_context *svga,
 {
    SVGA3dCopyBox *boxes;
    unsigned i;
+   struct pipe_resource *dummy;
 
    assert(sbuf->handle); 
    assert(sbuf->hwbuf);
@@ -289,9 +290,9 @@ svga_buffer_upload_flush(struct svga_context *svga,
    sbuf->dma.svga = NULL;
    sbuf->dma.boxes = NULL;
 
-   /* Decrement reference count */
-   pipe_reference(&(sbuf->b.b.reference), NULL);
-   sbuf = NULL;
+   /* Decrement reference count (and potentially destroy) */
+   dummy = &sbuf->b.b;
+   pipe_resource_reference(&dummy, NULL);
 }
 
 




More information about the mesa-commit mailing list