glx: add fail check for current context in another thread
The GLX spec for glXMakeCurrent (3.3): "If ctx is current to some other thread, then glXMakeCurrent will generate a BadAccess error" The GLX spec for glXCopyContext (3.3): "If the destination context is current for some thread then a BadAccess error is generated" Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7961 Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Illia Polishchuk <illia.a.polishchuk@globallogic.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22546>
This commit is contained in:

committed by
Marge Bot

parent
2795cf7422
commit
45ea17d244
@@ -579,6 +579,14 @@ glXCopyContext(Display * dpy, GLXContext source_user,
|
||||
{
|
||||
struct glx_context *source = (struct glx_context *) source_user;
|
||||
struct glx_context *dest = (struct glx_context *) dest_user;
|
||||
|
||||
/* GLX spec 3.3: If the destination context is current for some thread
|
||||
* then a BadAccess error is generated
|
||||
*/
|
||||
if (dest && dest->currentDpy) {
|
||||
__glXSendError(dpy, BadAccess, 0, X_GLXCopyContext, true);
|
||||
return;
|
||||
}
|
||||
#ifdef GLX_USE_APPLEGL
|
||||
struct glx_context *gc = __glXGetCurrentContext();
|
||||
int errorcode;
|
||||
|
@@ -138,6 +138,15 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
|
||||
__glXSetCurrentContextNull();
|
||||
|
||||
if (gc) {
|
||||
/* GLX spec 3.3: If ctx is current to some other thread, then
|
||||
* glXMakeContextCurrent will generate a BadAccess error
|
||||
*/
|
||||
if (gc->currentDpy)
|
||||
{
|
||||
__glXUnlock();
|
||||
__glXSendError(dpy, BadAccess, None, opcode, True);
|
||||
return False;
|
||||
}
|
||||
/* Attempt to bind the context. We do this before mucking with
|
||||
* gc and __glXSetCurrentContext to properly handle our state in
|
||||
* case of an error.
|
||||
|
Reference in New Issue
Block a user