summaryrefslogtreecommitdiff
path: root/src/glx/glxcurrent.c
diff options
context:
space:
mode:
authorStéphane Marchesin <marcheu@chromium.org>2011-06-15 15:09:12 -0700
committerStéphane Marchesin <marcheu@chromium.org>2011-06-17 11:20:19 -0700
commitbf69ce37f0dcbb479078ee676d5100ac63e20750 (patch)
treecfb0bf5deb989d947503e2bbeddde5aa5080fb62 /src/glx/glxcurrent.c
parent8173471fc25f4c768cab54fa840fd4c53d1c3c0f (diff)
glx: implement drawable refcounting.
The current dri context unbind logic will leak drawables until the process dies (they will then get released by the GEM code). There are two ways to fix this: either always call driReleaseDrawables every time we unbind a context (but that costs us round trips to the X server at getbuffers() time) or implement proper drawable refcounting. This patch implements the latter. Signed-off-by: Antoine Labour <piman@chromium.org> Signed-off-by: Stéphane Marchesin <marcheu@chromium.org> Reviewed-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'src/glx/glxcurrent.c')
-rw-r--r--src/glx/glxcurrent.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/glx/glxcurrent.c b/src/glx/glxcurrent.c
index 064fd71ae6..9eb7d5ac54 100644
--- a/src/glx/glxcurrent.c
+++ b/src/glx/glxcurrent.c
@@ -255,8 +255,6 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
if (--oldGC->thread_refcount == 0) {
oldGC->vtable->unbind(oldGC, gc);
oldGC->currentDpy = 0;
- oldGC->currentDrawable = None;
- oldGC->currentReadable = None;
if (oldGC->xid == None && oldGC != gc) {
/* We are switching away from a context that was
@@ -268,13 +266,15 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
}
if (gc) {
- if (gc->thread_refcount++ == 0) {
- gc->currentDpy = dpy;
- gc->currentDrawable = draw;
- gc->currentReadable = read;
- }
+ if (gc->thread_refcount == 0)
+ gc->currentDpy = dpy;
__glXSetCurrentContext(gc);
ret = gc->vtable->bind(gc, oldGC, draw, read);
+ if (gc->thread_refcount == 0) {
+ gc->currentDrawable = draw;
+ gc->currentReadable = read;
+ }
+ gc->thread_refcount++;
} else {
__glXSetCurrentContextNull();
}