summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCharmaine Lee <[email protected]>2019-05-18 18:32:13 -0700
committerCharmaine Lee <[email protected]>2019-05-20 13:09:32 -0700
commitb480adfa5ee224528eaed7e1da934a2d3e2b94d6 (patch)
treec54a64cee480c7a169aa16bebf4ca63dca635f19 /src
parent7e5723d6d7631604116b3cef4ab571200e1820d4 (diff)
st/mesa: purge framebuffers with current context after unbinding winsys buffers
With commit c89e8470e58, framebuffers are purged after unbinding context, but this change also introduces a heap corruption when running Rhino application on VMware svga device. Instead of purging the framebuffers after the context is unbound, this patch first ubinds the winsys buffers, then purges the framebuffers with the current context, and then finally unbinds the context. This fixes heap corruption. Cc: [email protected] Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/state_tracker/st_manager.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
index bee1f6b1366..35d41f0a2c1 100644
--- a/src/mesa/state_tracker/st_manager.c
+++ b/src/mesa/state_tracker/st_manager.c
@@ -1105,10 +1105,17 @@ st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi,
else {
GET_CURRENT_CONTEXT(ctx);
- ret = _mesa_make_current(NULL, NULL, NULL);
-
- if (ctx)
+ if (ctx) {
+ /* Before releasing the context, release its associated
+ * winsys buffers first. Then purge the context's winsys buffers list
+ * to free the resources of any winsys buffers that no longer have
+ * an existing drawable.
+ */
+ ret = _mesa_make_current(ctx, NULL, NULL);
st_framebuffers_purge(ctx->st);
+ }
+
+ ret = _mesa_make_current(NULL, NULL, NULL);
}
return ret;