xserver: Branch 'master'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 9 15:12:47 UTC 2022


 glx/vndcmds.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

New commits:
commit 4781f2a5a8c2c2b000374e2d87982a6701d5a6b3
Author: Doğukan Korkmaztürk <dkorkmazturk at nvidia.com>
Date:   Tue Nov 22 13:43:16 2022 -0500

    GLX: Free the tag of the old context later
    
    In CommonMakeCurrent() function, the tag of the old context is freed
    before the new context is made current. This is problematic because if
    the CommonMakeNewCurrent() function fails, the tag of the old context
    ends up being removed, even though it is still active. This causes
    subsequent glXMakeCurrent() or glXMakeContextCurrent() requests to
    generate a GLXBadContextTag error.
    
    This change moves the function call that frees the old tag to a location
    where the result of CommonMakeNewCurrent() call is known and it is safe
    to free it.
    
    Signed-off-by: Doğukan Korkmaztürk <dkorkmazturk at nvidia.com>

diff --git a/glx/vndcmds.c b/glx/vndcmds.c
index d6d8719e1..d1e088973 100644
--- a/glx/vndcmds.c
+++ b/glx/vndcmds.c
@@ -165,9 +165,6 @@ static int CommonLoseCurrent(ClientPtr client, GlxContextTagInfo *tagInfo)
             tagInfo->tag, // No old context tag,
             None, None, None, 0);
 
-    if (ret == Success) {
-        GlxFreeContextTag(tagInfo);
-    }
     return ret;
 }
 
@@ -259,7 +256,6 @@ static int CommonMakeCurrent(ClientPtr client,
             if (ret != Success) {
                 return ret;
             }
-            oldTag = NULL;
         }
 
         if (newVendor != NULL) {
@@ -270,6 +266,9 @@ static int CommonMakeCurrent(ClientPtr client,
         } else {
             reply.contextTag = 0;
         }
+
+        GlxFreeContextTag(oldTag);
+        oldTag = NULL;
     }
 
     reply.contextTag = GlxCheckSwap(client, reply.contextTag);


More information about the xorg-commit mailing list