I changed the patch again to touch only __glXForceCurrent function
From 1fabb089a3993a328eb0aaa68b14932f5c831fcb Mon Sep 17 00:00:00 2001 From: Guilherme Quentel Melo <[email protected]> Date: Thu, 24 Mar 2016 03:13:30 -0300 Subject: [PATCH xserver v3] glx: avoid memory leak when using indirect rendering
When multiple processes are using GL with indirect rendering a race condition can make drawables refcount never drop to zero. This situation could happen when there are many X clients using indirect GLX: 1 - client1: calls glXMakeCurrent 2 - client2: calls glXMakeCurrent This is the first context switch for this client. So old_context_tag=0 3 - client1: calls glXRender For the client, its context is already current. For the server side lastGLContext points to client2's context. Signed-off-by: Guilherme Quentel Melo <[email protected]> --- glx/glxext.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index e41b881..c201fba 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -469,6 +469,12 @@ __glXForceCurrent(__GLXclientState * cl, GLXContextTag tag, int *error) /* Make this context the current one for the GL. */ if (!cx->isDirect) { + /* + * If it is being forced, it means that this context was already made + * current. So it cannot just be made current again without decrementing + * refcount's + */ + (*cx->loseCurrent) (cx); lastGLContext = cx; if (!(*cx->makeCurrent) (cx)) { /* Bind failed, and set the error code. Bummer */ -- 2.7.4
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
