mesa: Check/propagate return value on st_make_current.
authorJosé Fonseca <jfonseca@vmware.com>
Sat, 30 May 2009 19:41:14 +0000 (12:41 -0700)
committerJosé Fonseca <jfonseca@vmware.com>
Sun, 31 May 2009 03:29:02 +0000 (20:29 -0700)
Prevents segmentation fault when trying to set the viewport/scissor
after a context/drawable visual mismatch.

src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_public.h

index e536029e86ea062b734c8467f595c58a45a656bd..92ddffc0148de14462ad16533ab9583fd7d6e0f5 100644 (file)
@@ -263,9 +263,10 @@ void st_destroy_context( struct st_context *st )
 }
 
 
-void st_make_current(struct st_context *st,
-                     struct st_framebuffer *draw,
-                     struct st_framebuffer *read)
+GLboolean
+st_make_current(struct st_context *st,
+                struct st_framebuffer *draw,
+                struct st_framebuffer *read)
 {
    /* Call this periodically to detect when the user has begun using
     * GL rendering from multiple threads.
@@ -274,7 +275,8 @@ void st_make_current(struct st_context *st,
 
    if (st) {
       GLboolean firstTime = st->ctx->FirstTimeCurrent;
-      _mesa_make_current(st->ctx, &draw->Base, &read->Base);
+      if(!_mesa_make_current(st->ctx, &draw->Base, &read->Base))
+         return GL_FALSE;
       /* Need to initialize viewport here since draw->Base->Width/Height
        * will still be zero at this point.
        * This could be improved, but would require rather extensive work
@@ -286,9 +288,10 @@ void st_make_current(struct st_context *st,
          _mesa_set_scissor(st->ctx, 0, 0, w, h);
 
       }
+      return GL_TRUE;
    }
    else {
-      _mesa_make_current(NULL, NULL, NULL);
+      return _mesa_make_current(NULL, NULL, NULL);
    }
 }
 
index 290b8a974e61fee7b9f97dc56c1d9fe662a8c7b2..c411687bb64b03ec83ace18bd722dbc6d2bfda21 100644 (file)
@@ -91,9 +91,9 @@ void *st_framebuffer_private( struct st_framebuffer *stfb );
 
 void st_unreference_framebuffer( struct st_framebuffer *stfb );
 
-void st_make_current(struct st_context *st,
-                     struct st_framebuffer *draw,
-                     struct st_framebuffer *read);
+GLboolean st_make_current(struct st_context *st,
+                          struct st_framebuffer *draw,
+                          struct st_framebuffer *read);
 
 struct st_context *st_get_current(void);