sw/xlib: Fix bad logic in shm allocation.
authorJosé Fonseca <jfonseca@vmware.com>
Sat, 24 Apr 2010 09:15:09 +0000 (10:15 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 24 Apr 2010 09:15:09 +0000 (10:15 +0100)
Fixes fdo 27823.

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

index 7df74164d055676352809d82983fdb9092ae3310..56d2df825dfbf1e94901dbf91be8bb94a5e10bab 100644 (file)
@@ -124,6 +124,9 @@ static char *alloc_shm(struct xm_displaytarget *buf, unsigned size)
 {
    XShmSegmentInfo *const shminfo = & buf->shminfo;
 
+   shminfo->shmid = -1;
+   shminfo->shmaddr = (char *) -1;
+
    shminfo->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT|0777);
    if (shminfo->shmid < 0) {
       return NULL;
@@ -385,12 +388,9 @@ xm_displaytarget_create(struct sw_winsys *winsys,
    xm_dt->stride = align(util_format_get_stride(format, width), alignment);
    size = xm_dt->stride * nblocksy;
 
-   if (!debug_get_option_xlib_no_shm())
-   {
+   if (!debug_get_option_xlib_no_shm()) {
       xm_dt->data = alloc_shm(xm_dt, size);
-      if(!xm_dt->data) {
-         xm_dt->shminfo.shmid = -1;
-         xm_dt->shminfo.shmaddr = (char *) -1;
+      if (xm_dt->data) {
          xm_dt->shm = TRUE;
       }
    }