GLX direct rendering is blocked by GrabServer even when the client is impervious to grabs by XTestGrabControl
To reproduce, run the attached program. (ImperviousToServerGrabsGLX2.c, built with the Makefile) Then grab the server, e.g. using (GrabServer.c ) Then the program ImperviousToServerGrabsGLX2 stops drawing while the server is grabbed.
If you switch to indirect drawing by changing the /* direct = / True to / direct = */ False in the call to glXCreateContext line 78 of ImperviousToServerGrabsGLX2.c, then it works correctly, i.e., the drawing continues even when the server is grabbed. (Be sure to enable indirect drawing in xorg.conf for testing that.)
I.e. XTestGrabControl works for indirect GLX rendering, but it doesn't work for direct GLX rendering (but should work for direct rendering, too)
This has been reproduced on CentOS7 64bit with Xorg 1.20.1 and Nvidia driver 410.78. and on RHEL 7.7 with Xorg 1.20.4 and Nvidia driver 430.50, 64 bit.
I am not sure whether the cause is in Xorg or in the Nvidia driver or in some other component of the DRI infrastructure.