diff options
| author | José Fonseca <jfonseca@vmware.com> | 2009-05-30 12:41:14 -0700 | 
|---|---|---|
| committer | José Fonseca <jfonseca@vmware.com> | 2009-05-30 20:29:02 -0700 | 
| commit | 8aef306c342a973f31b384a71d7a22ade9153a99 (patch) | |
| tree | a92df8f89639a3c4e30aab824809b20ffe100f34 | |
| parent | 29c6c8eb18ace95b9af6dcf34e02c2b8db0ffda8 (diff) | |
mesa: Check/propagate return value on st_make_current.
Prevents segmentation fault when trying to set the viewport/scissor
after a context/drawable visual mismatch.
| -rw-r--r-- | src/mesa/state_tracker/st_context.c | 13 | ||||
| -rw-r--r-- | src/mesa/state_tracker/st_public.h | 6 | 
2 files changed, 11 insertions, 8 deletions
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index e536029e86..92ddffc014 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -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);     }  } diff --git a/src/mesa/state_tracker/st_public.h b/src/mesa/state_tracker/st_public.h index 290b8a974e..c411687bb6 100644 --- a/src/mesa/state_tracker/st_public.h +++ b/src/mesa/state_tracker/st_public.h @@ -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);  | 
