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