[PATCH glx] glx: avoid memory leak when using indirect rendering

Guilherme Melo gqmelo at gmail.com
Tue Dec 8 10:48:43 PST 2015


> This should be lastGLContext->loseCurrent(lastGLContext) I think. cx


Yes, you are right. It seems the right thing to do, but actually this
should be done every place where lastGLContext is set, right?
It seems to me that every place where lastGLContext is set is a potential
leak.

While you're at it, it'd be nice to move that big block comment into the
> commit message


I'll do that, thanks.


Guilherme


2015-12-08 14:44 GMT-02:00 Adam Jackson <ajax at nwnk.net>:

> On Fri, 2015-12-04 at 14:16 -0200, Guilherme Quentel Melo wrote:
>
> > diff --git a/glx/glxext.c b/glx/glxext.c
> > index e41b881..16b8039 100644
> > --- a/glx/glxext.c
> > +++ b/glx/glxext.c
> > @@ -469,6 +469,24 @@ __glXForceCurrent(__GLXclientState * cl,
> GLXContextTag tag, int *error)
> >
> >      /* Make this context the current one for the GL. */
> >      if (!cx->isDirect) {
> > +        /*
> > +         ** If we are forcing the context it means someone already
> called makeCurrent before. If
> > +         ** we just call makeCurrent again, the drawable of this
> context will be left with one
> > +         ** refcount more forever and will never be freed.
> > +         **
> > +         ** This situation happens when there are many X clients using
> GL:
> > +         **
> > +         ** 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. So the execution path
> > +         **     will get here.
> > +         */
> > +        (*cx->loseCurrent) (cx);
>
> This should be lastGLContext->loseCurrent(lastGLContext) I think. cx
> here is the current context from client2's perspective, you want to
> release client1's context.
>
> While you're at it, it'd be nice to move that big block comment into
> the commit message and just note /* drop previous client's context */
> or similar in the code.
>
> - ajax
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg-devel/attachments/20151208/c724f84f/attachment.html>


More information about the xorg-devel mailing list