mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-05 11:08:15 +02:00
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@redhat.com>
Signed-off-by: Guilherme Quentel Melo <gqmelo@gmail.com>
(cherry picked from commit a134d1e7ea)
This commit is contained in:
parent
be8eb5c4a1
commit
54ba95861e
1 changed files with 6 additions and 0 deletions
|
|
@ -469,6 +469,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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue