[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