[Mesa-dev] [Bug 30075] New: Possible glXDestroyContext glXMakeContextCurrent inconsistency
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Tue Sep 7 21:54:53 PDT 2010
https://bugs.freedesktop.org/show_bug.cgi?id=30075
Summary: Possible glXDestroyContext glXMakeContextCurrent
inconsistency
Product: Mesa
Version: unspecified
Platform: x86 (IA32)
OS/Version: Linux (All)
Status: NEW
Severity: normal
Priority: medium
Component: Mesa core
AssignedTo: mesa-dev at lists.freedesktop.org
ReportedBy: jpsinthemix at verizon.net
Hi,
I'm using Mesa-7.8.2 (with libdrm-2.4.21, xorg-server-1.8.2, and
linux-2.6.35.4). Once done with a current context, my understanding is that one
then calls glXMakeContextCurrent(dpy, None, None, NULL) or glXMakeCurrent(dpy,
None, Null) as appropriate, and then calls glXDestroyContext(dpy, ctx).
However, from OpenGL doc, it would appear to be acceptable, while context ctx
is still current, to simply call glXDestroyContext(dpy, ctx) when done with it;
in this case, ctx->dri_xid will be set to None (ref: glxcmds.c, line: 568), and
glXDestroyContext will then return without actually destroying anything
(gc->currentDpy is true; line 571, glxcmds.c). The actual destruction of ctx
will then take place in the ensuing glXMakeContextCurrent call used to set a
new context current (ref: glxcurrent.c, line 339).
There appears to be an inconsistency in the two above destroy context
approaches. Specifically, assuming GLX_DIRECT_RENDERING and NOT
GLX_USE_APPLEGL, if one issues glXDestroyContext(dpy, ctx), after ctx is made
non-current, then the following code in glxcmds.c is executed:
581 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
582 /* Destroy the direct rendering context */
583 if (gc->driContext) {
584 (*gc->driContext->destroyContext) (gc->driContext, gc->psc, dpy);
585 gc->driContext = NULL;
586 GarbageCollectDRIDrawables(dpy, gc->psc);
587 }
588 #endif
as well as:
615 #ifndef GLX_USE_APPLEGL
616 if (!imported) {
617 /*
618 ** This dpy also created the server side part of the context.
619 ** Send the glXDestroyContext request.
620 */
621 LockDisplay(dpy);
622 GetReq(GLXDestroyContext, req);
623 req->reqType = opcode;
624 req->glxCode = X_GLXDestroyContext;
625 req->context = xid;
626 UnlockDisplay(dpy);
627 SyncHandle();
628 }
629 #endif
However, if one issues glXDestroyContext(dpy, ctx) while ctx is still current,
then, in the soon to follow glXMakeContextCurrent call to set a new context,
the former 'previously destroyed' context ctx is destroyed, but apparently
WITHOUT carrying out either line 586, or lines 621-627 above. Perhaps, I'm
missing something here, but I am concerned about why the dricontext garbage
collection and the server-side context doesn't appear to be handled in this
case.
thanks
--
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the mesa-dev
mailing list