xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Mon Jun 20 17:29:57 UTC 2016


 glx/glxext.c |    6 ++++++
 1 file changed, 6 insertions(+)

New commits:
commit a134d1e7eada0ac90fb622f45833c87b72c9aa06
Author: Guilherme Quentel Melo <gqmelo at gmail.com>
Date:   Tue May 10 00:29:58 2016 +0000

    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.
    
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Guilherme Quentel Melo <gqmelo at gmail.com>

diff --git a/glx/glxext.c b/glx/glxext.c
index 67ec07f..0de9109 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -466,6 +466,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 */


More information about the xorg-commit mailing list