[Mesa-dev] [PATCH 3/3] glx: Only remove the glx_display from the list after it's destroyed.
Brian Paul
brianp at vmware.com
Thu Apr 7 17:44:58 PDT 2011
On 04/07/2011 03:50 PM, Henri Verbeet wrote:
> ---
> src/glx/glxext.c | 11 ++++++++---
> 1 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/src/glx/glxext.c b/src/glx/glxext.c
> index e35dcb7..278c719 100644
> --- a/src/glx/glxext.c
> +++ b/src/glx/glxext.c
> @@ -250,19 +250,24 @@ glx_display_free(struct glx_display *priv)
> static int
> __glXCloseDisplay(Display * dpy, XExtCodes * codes)
> {
> - struct glx_display *priv, **prev;
> + struct glx_display *priv, **prev, *next;
>
> _XLockMutex(_Xglobal_lock);
> prev =&glx_displays;
> for (priv = glx_displays; priv; prev =&priv->next, priv = priv->next) {
> if (priv->dpy == dpy) {
> - (*prev) = priv->next;
> break;
> }
> }
> - _XUnlockMutex(_Xglobal_lock);
>
> + /* Only remove the display from the list after it's destroyed. The cleanup
> + * code (e.g. driReleaseDrawables()) ends up calling __glXInitialize(),
> + * which would create a new glx_display while we're trying to destroy this
> + * one. */
> + next = priv->next;
> glx_display_free(priv);
> + *prev = next;
> + _XUnlockMutex(_Xglobal_lock);
>
> return 1;
> }
Looks good.
-Brian
More information about the mesa-dev
mailing list