OSDN Git Service

freedreno: fix double-free on exit
authorRob Clark <robclark@freedesktop.org>
Sat, 15 Apr 2017 18:43:17 +0000 (14:43 -0400)
committerRob Clark <robclark@freedesktop.org>
Sat, 15 Apr 2017 18:43:17 +0000 (14:43 -0400)
Fixes: a07ae97 ("freedreno: fix device close issues")
Signed-off-by: Rob Clark <robclark@freedesktop.org>
freedreno/freedreno_device.c

index dba7ec4..12b95fd 100644 (file)
@@ -112,13 +112,13 @@ struct fd_device * fd_device_ref(struct fd_device *dev)
 
 static void fd_device_del_impl(struct fd_device *dev)
 {
+       int close_fd = dev->closefd ? dev->fd : -1;
        fd_bo_cache_cleanup(&dev->bo_cache, 0);
        drmHashDestroy(dev->handle_table);
        drmHashDestroy(dev->name_table);
        dev->funcs->destroy(dev);
-       if (dev->closefd)
-               close(dev->fd);
-       free(dev);
+       if (close_fd >= 0)
+               close(close_fd);
 }
 
 drm_private void fd_device_del_locked(struct fd_device *dev)