This is handled correctly in the DRI extensions now. Importantly it is not done for DRI3, and does not need to be.
Signed-off-by: Adam Jackson <[email protected]> --- glx/glxext.c | 59 +-------------------------------------------------------- glx/glxserver.h | 8 -------- 2 files changed, 1 insertion(+), 66 deletions(-) diff --git a/glx/glxext.c b/glx/glxext.c index e88bbd107..69f79874a 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -100,9 +100,7 @@ ContextGone(__GLXcontext * cx, XID id) return True; } -static __GLXcontext *glxPendingDestroyContexts; static __GLXcontext *glxAllContexts; -static int glxBlockClients; /* ** Destroy routine that gets called when a drawable is freed. A drawable @@ -197,17 +195,7 @@ __glXFreeContext(__GLXcontext * cx) lastGLContext = NULL; } - /* We can get here through both regular dispatching from - * __glXDispatch() or as a callback from the resource manager. In - * the latter case we need to lift the DRI lock manually. */ - - if (!glxBlockClients) { - cx->destroy(cx); - } - else { - cx->next = glxPendingDestroyContexts; - glxPendingDestroyContexts = cx; - } + cx->destroy(cx); return GL_TRUE; } @@ -493,40 +481,6 @@ __glXForceCurrent(__GLXclientState * cl, GLXContextTag tag, int *error) /************************************************************************/ -void -glxSuspendClients(void) -{ - int i; - - for (i = 1; i < currentMaxClients; i++) { - if (clients[i] && glxGetClient(clients[i])->inUse) - IgnoreClient(clients[i]); - } - - glxBlockClients = TRUE; -} - -void -glxResumeClients(void) -{ - __GLXcontext *cx, *next; - int i; - - glxBlockClients = FALSE; - - for (i = 1; i < currentMaxClients; i++) { - if (clients[i] && glxGetClient(clients[i])->inUse) - AttendClient(clients[i]); - } - - for (cx = glxPendingDestroyContexts; cx != NULL; cx = next) { - next = cx->next; - - cx->destroy(cx); - } - glxPendingDestroyContexts = NULL; -} - static glx_gpa_proc _get_proc_address; void @@ -556,8 +510,6 @@ __glXDispatch(ClientPtr client) opcode = stuff->glxCode; cl = glxGetClient(client); - /* Mark it in use so we suspend it on VT switch. */ - cl->inUse = TRUE; /* ** If we're expecting a glXRenderLarge request, this better be one. @@ -567,15 +519,6 @@ __glXDispatch(ClientPtr client) return __glXError(GLXBadLargeRequest); } - /* If we're currently blocking GLX clients, just put this guy to - * sleep, reset the request and return. */ - if (glxBlockClients) { - ResetCurrentRequest(client); - client->sequence--; - IgnoreClient(client); - return Success; - } - /* ** Use the opcode to index into the procedure table. */ diff --git a/glx/glxserver.h b/glx/glxserver.h index e7ea8c282..f08df13f0 100644 --- a/glx/glxserver.h +++ b/glx/glxserver.h @@ -107,9 +107,6 @@ enum { GLX_ALL_VISUALS }; -void glxSuspendClients(void); -void glxResumeClients(void); - typedef void (*glx_func_ptr)(void); typedef glx_func_ptr (*glx_gpa_proc)(const char *); void __glXsetGetProcAddress(glx_gpa_proc get_proc_address); @@ -129,11 +126,6 @@ __glXregisterPresentCompleteNotify(void); */ struct __GLXclientStateRec { /* - ** Whether this structure is currently being used to support a client. - */ - Bool inUse; - - /* ** Buffer for returned data. */ GLbyte *returnBuf; -- 2.13.0 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
