From 3bc6fe371cf6a5f75ff11b840e289ff8084f5d7b Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 21 Oct 2010 19:49:32 -0600 Subject: winsys/xlib: fix up allocation/dealloction of XImage Fixes a crash upon exit when using remote display. --- src/gallium/winsys/sw/xlib/xlib_sw_winsys.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/gallium/winsys/sw') diff --git a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c index 003fa628cc..00fc0b7525 100644 --- a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c +++ b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c @@ -196,11 +196,14 @@ alloc_ximage(struct xm_displaytarget *xm_dt, struct xlib_drawable *xmb, unsigned width, unsigned height) { + /* try allocating a shared memory image first */ if (xm_dt->shm) { alloc_shm_ximage(xm_dt, xmb, width, height); - return; + if (xm_dt->tempImage) + return; /* success */ } + /* try regular (non-shared memory) image */ xm_dt->tempImage = XCreateImage(xm_dt->display, xmb->visual, xmb->depth, @@ -252,6 +255,10 @@ xm_displaytarget_destroy(struct sw_winsys *ws, xm_dt->shminfo.shmid = -1; xm_dt->shminfo.shmaddr = (char *) -1; + + xm_dt->data = NULL; + if (xm_dt->tempImage) + xm_dt->tempImage->data = NULL; } else { FREE(xm_dt->data); -- cgit v1.2.3