Mesa (master): svga: use pipe_sampler_view_release() to avoid segfault

Brian Paul brianp at kemper.freedesktop.org
Thu Feb 23 14:54:39 UTC 2012


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

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Feb 16 12:23:16 2012 -0700

svga: use pipe_sampler_view_release() to avoid segfault

This fixes another case of faulting when freeing a pipe_sampler_view
that belongs to a previously destroyed context.

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

---

 src/gallium/drivers/svga/svga_pipe_sampler.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_pipe_sampler.c b/src/gallium/drivers/svga/svga_pipe_sampler.c
index 13c7b18..c1ea4f8 100644
--- a/src/gallium/drivers/svga/svga_pipe_sampler.c
+++ b/src/gallium/drivers/svga/svga_pipe_sampler.c
@@ -225,8 +225,12 @@ svga_set_fragment_sampler_views(struct pipe_context *pipe,
    }
 
    for (i = 0; i < num; i++) {
-      pipe_sampler_view_reference(&svga->curr.sampler_views[i],
-                                  views[i]);
+      /* Note: we're using pipe_sampler_view_release() here to work around
+       * a possible crash when the old view belongs to another context that
+       * was already destroyed.
+       */
+      pipe_sampler_view_release(pipe, &svga->curr.sampler_views[i]);
+      pipe_sampler_view_reference(&svga->curr.sampler_views[i], views[i]);
 
       if (!views[i])
          continue;




More information about the mesa-commit mailing list