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:bri...@vmware.com] > Sent: Thursday, March 3, 2016 11:32 AM > To: Kyriazis, George <george.kyria...@intel.com>; mesa- > d...@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 <bri...@vmware.com> > Reviewed-by: Brian Paul <bri...@vmware.com> > > I'll push this in a bit. > > -Brian _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev