summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2014-03-24 17:17:34 -0600
committerBrian Paul <[email protected]>2014-03-26 10:31:13 -0600
commit488d4c482637af4b0ab25a3b0e664795164fe819 (patch)
treeebd3a04a9181f0dfe000dcc24cf4f49234f319c1 /src/mesa/state_tracker
parent82246f793980204cd68240b2bc2b2b3cb7ed7d3d (diff)
st/mesa: add null pointer checking in query object functions
Don't pass null query object pointers into gallium functions. This avoids segfaulting in the VMware driver (and others?) if the pipe_context::create_query() call fails and returns NULL. Cc: "10.0" "10.1" <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_cb_queryobj.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c
index 5186a5157fc..78a737094cd 100644
--- a/src/mesa/state_tracker/st_cb_queryobj.c
+++ b/src/mesa/state_tracker/st_cb_queryobj.c
@@ -141,7 +141,13 @@ st_BeginQuery(struct gl_context *ctx, struct gl_query_object *q)
stq->pq = pipe->create_query(pipe, type);
stq->type = type;
}
- pipe->begin_query(pipe, stq->pq);
+ if (stq->pq) {
+ pipe->begin_query(pipe, stq->pq);
+ }
+ else {
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBeginQuery");
+ return;
+ }
}
assert(stq->type == type);
}
@@ -162,7 +168,8 @@ st_EndQuery(struct gl_context *ctx, struct gl_query_object *q)
stq->type = PIPE_QUERY_TIMESTAMP;
}
- pipe->end_query(pipe, stq->pq);
+ if (stq->pq)
+ pipe->end_query(pipe, stq->pq);
}
@@ -171,6 +178,13 @@ get_query_result(struct pipe_context *pipe,
struct st_query_object *stq,
boolean wait)
{
+ if (!stq->pq) {
+ /* Only needed in case we failed to allocate the gallium query earlier.
+ * Return TRUE so we don't spin on this forever.
+ */
+ return TRUE;
+ }
+
if (!pipe->get_query_result(pipe,
stq->pq,
wait,