[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