summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2009-05-30 12:41:14 -0700
committerJosé Fonseca <jfonseca@vmware.com>2009-05-30 20:29:02 -0700
commit8aef306c342a973f31b384a71d7a22ade9153a99 (patch)
treea92df8f89639a3c4e30aab824809b20ffe100f34
parent29c6c8eb18ace95b9af6dcf34e02c2b8db0ffda8 (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.c13
-rw-r--r--src/mesa/state_tracker/st_public.h6
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);