[Mesa-dev] [PATCH v3 2/2] Hang off screen destructor off main XCloseDisplay() callback.

Kyriazis, George george.kyriazis at intel.com
Thu Mar 3 17:41:35 UTC 2016


Brian,

Thanks!  Based on my last email, the code that destroys the screen I think should be removed.  I can either send out an updated patch, or check it in through Tim Rowley (since he just got his write privileges).

Thank you!

George

> -----Original Message-----
> From: Brian Paul [mailto:brianp at vmware.com]
> Sent: Thursday, March 3, 2016 11:32 AM
> To: Kyriazis, George <george.kyriazis at intel.com>; mesa-
> dev at lists.freedesktop.org
> Subject: Re: [Mesa-dev] [PATCH v3 2/2] Hang off screen destructor off main
> XCloseDisplay() callback.
> 
> On 03/02/2016 06:28 PM, George Kyriazis wrote:
> > This resolves some order dependencies between the already existing
> > callback the newly created one.
> > ---
> >   src/gallium/state_trackers/glx/xlib/glx_api.c |  1 +
> >   src/gallium/state_trackers/glx/xlib/xm_api.c  | 58 +++++++++++--------------
> --
> >   src/gallium/state_trackers/glx/xlib/xm_api.h  |  3 ++
> >   3 files changed, 27 insertions(+), 35 deletions(-)
> >
> > diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c
> > b/src/gallium/state_trackers/glx/xlib/glx_api.c
> > index 0456d44..1c541b7 100644
> > --- a/src/gallium/state_trackers/glx/xlib/glx_api.c
> > +++ b/src/gallium/state_trackers/glx/xlib/glx_api.c
> > @@ -615,6 +615,7 @@ close_display_callback(Display *dpy, XExtCodes
> *codes)
> >   {
> >      xmesa_destroy_buffers_on_display(dpy);
> >      destroy_visuals_on_display(dpy);
> > +   xmesa_close_display(dpy);
> >      return 0;
> >   }
> >
> > diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c
> > b/src/gallium/state_trackers/glx/xlib/xm_api.c
> > index 2f1bfae..cee4f18 100644
> > --- a/src/gallium/state_trackers/glx/xlib/xm_api.c
> > +++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
> > @@ -126,7 +126,6 @@ xmesa_get_param(struct st_manager *smapi,
> >   typedef struct _XMesaExtDisplayInfo {
> >      struct _XMesaExtDisplayInfo *next;
> >      Display *display;
> > -   XExtCodes *codes;
> >      struct xmesa_display mesaDisplay;
> >   } XMesaExtDisplayInfo;
> >
> > @@ -138,8 +137,8 @@ typedef struct _XMesaExtInfo {
> >   static XMesaExtInfo MesaExtInfo;
> >
> >   /* hook to delete XMesaDisplay on XDestroyDisplay */ -static int
> > -xmesa_close_display(Display *display, XExtCodes *codes)
> > +extern void
> > +xmesa_close_display(Display *display)
> >   {
> >      XMesaExtDisplayInfo *info, *prev;
> >
> > @@ -159,7 +158,7 @@ xmesa_close_display(Display *display, XExtCodes
> *codes)
> >      if (info == NULL) {
> >         /* no display found */
> >         _XUnlockMutex(_Xglobal_lock);
> > -      return 0;
> > +      return;
> >      }
> >
> >      /* remove display entry from list */ @@ -181,7 +180,6 @@
> > xmesa_close_display(Display *display, XExtCodes *codes)
> >      free(xmdpy->smapi);
> >
> >      XFree((char *) info);
> > -   return 1;
> >   }
> >
> >   static XMesaDisplay
> > @@ -218,14 +216,6 @@ xmesa_init_display( Display *display )
> >         return NULL;
> >      }
> >      info->display = display;
> > -   info->codes = XAddExtension(display);
> > -   if (info->codes == NULL) {
> > -      /* could not allocate extension.  Fail */
> > -      Xfree(info);
> > -      pipe_mutex_unlock(init_mutex);
> > -      return NULL;
> > -   }
> > -   XESetCloseDisplay(display, info->codes->extension,
> xmesa_close_display);
> >      xmdpy = &info->mesaDisplay; /* to be filled out below */
> >
> >      /* chain to the list of displays */ @@ -236,32 +226,30 @@
> > xmesa_init_display( Display *display )
> >      _XUnlockMutex(_Xglobal_lock);
> >
> >      /* now create the new XMesaDisplay info */
> > -   if (display) {
> > -      xmdpy->display = display;
> > -      xmdpy->screen = driver.create_pipe_screen(display);
> > -      xmdpy->smapi = CALLOC_STRUCT(st_manager);
> > -      xmdpy->pipe = NULL;
> > -      if (xmdpy->smapi) {
> > -         xmdpy->smapi->screen = xmdpy->screen;
> > -         xmdpy->smapi->get_param = xmesa_get_param;
> > -      }
> > +   assert(display);
> > +
> > +   xmdpy->display = display;
> > +   xmdpy->screen = driver.create_pipe_screen(display);
> > +   xmdpy->smapi = CALLOC_STRUCT(st_manager);
> > +   xmdpy->pipe = NULL;
> > +   if (xmdpy->smapi) {
> > +      xmdpy->smapi->screen = xmdpy->screen;
> > +      xmdpy->smapi->get_param = xmesa_get_param;
> > +   }
> >
> > -      if (xmdpy->screen && xmdpy->smapi) {
> > -         pipe_mutex_init(xmdpy->mutex);
> > +   if (xmdpy->screen && xmdpy->smapi) {
> > +      pipe_mutex_init(xmdpy->mutex);
> > +   }
> > +   else {
> > +      if (xmdpy->screen) {
> > +         xmdpy->screen->destroy(xmdpy->screen);
> > +         xmdpy->screen = NULL;
> >         }
> > -      else {
> > -         if (xmdpy->screen) {
> > -            xmdpy->screen->destroy(xmdpy->screen);
> > -            xmdpy->screen = NULL;
> > -         }
> > -         free(xmdpy->smapi);
> > -         xmdpy->smapi = NULL;
> > +      free(xmdpy->smapi);
> > +      xmdpy->smapi = NULL;
> >
> > -         xmdpy->display = NULL;
> > -      }
> > +      xmdpy->display = NULL;
> >      }
> > -   if (!xmdpy->display || xmdpy->display != display)
> > -      xmdpy = NULL;
> >
> >      pipe_mutex_unlock(init_mutex);
> >
> > diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.h
> > b/src/gallium/state_trackers/glx/xlib/xm_api.h
> > index ffdffc0..ccf35a5 100644
> > --- a/src/gallium/state_trackers/glx/xlib/xm_api.h
> > +++ b/src/gallium/state_trackers/glx/xlib/xm_api.h
> > @@ -378,6 +378,9 @@ xmesa_check_buffer_size(XMesaBuffer b);
> >   extern void
> >   xmesa_destroy_buffers_on_display(Display *dpy);
> >
> > +extern void
> > +xmesa_close_display(Display *dpy);
> > +
> >   static inline GLuint
> >   xmesa_buffer_width(XMesaBuffer b)
> >   {
> >
> 
> For both:
> Tested-by: Brian Paul <brianp at vmware.com>
> Reviewed-by: Brian Paul <brianp at vmware.com>
> 
> I'll push this in a bit.
> 
> -Brian



More information about the mesa-dev mailing list