winsys/xlib: fix up allocation/dealloction of XImage
authorBrian Paul <brianp@vmware.com>
Fri, 22 Oct 2010 01:49:32 +0000 (19:49 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 22 Oct 2010 01:49:34 +0000 (19:49 -0600)
Fixes a crash upon exit when using remote display.

src/gallium/winsys/sw/xlib/xlib_sw_winsys.c

index 003fa628cc2c90dab5dc0501c66fadb5b8fcf89f..00fc0b7525a38c5688f86f58beeef5c53fd2a8a6 100644 (file)
@@ -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);