[PATCH] Simplify memory management for the primary screen.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Passing NULL for pbits into fbScreenInit is a treacherous
thing to do.  It works, because we rapidly resize
the screen, and because the normal path never uses
the screen pixmap.

However, having NULL for pbits has side effects that derive
from the fact that NULL prevents ModifyPixmapHeader
from doing anything, which leaves the internal Screen Pixmap
pointer pointing to the end of an allocation, where
careless use can corrupt memory willy nilly.

We didn't really have a compelling reason to do this;
the qxl->fb memory can be dedicated to just screen use,
and the host_image can manage it's own memory.
---
 src/qxl_driver.c  |    2 +-
 src/qxl_surface.c |    8 +-------
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/src/qxl_driver.c b/src/qxl_driver.c
index dbb8ceb..dbb66b3 100644
--- a/src/qxl_driver.c
+++ b/src/qxl_driver.c
@@ -1717,7 +1717,7 @@ qxl_fb_init (qxl_screen_t *qxl, ScreenPtr pScreen)
     ErrorF ("allocated %d x %d  %p\n", pScrn->virtualX, pScrn->virtualY, qxl->fb);
 #endif
     
-    if (!fbScreenInit (pScreen, NULL,
+    if (!fbScreenInit (pScreen, qxl->fb,
                        pScrn->virtualX, pScrn->virtualY,
                        pScrn->xDpi, pScrn->yDpi, pScrn->displayWidth,
                        pScrn->bitsPerPixel))
diff --git a/src/qxl_surface.c b/src/qxl_surface.c
index e88675f..76ec7d1 100644
--- a/src/qxl_surface.c
+++ b/src/qxl_surface.c
@@ -404,15 +404,9 @@ qxl_surface_cache_create_primary (surface_cache_t	*cache,
     dev_image = pixman_image_create_bits (format, mode->x_res, mode->y_res,
 					  (uint32_t *)dev_addr, -mode->stride);
 
-    if (qxl->fb != NULL)
-        free(qxl->fb);
-    qxl->fb = calloc (qxl->virtual_x * qxl->virtual_y, 4);
-    if (!qxl->fb)
-        return NULL;
-
     host_image = pixman_image_create_bits (format, 
 					   qxl->virtual_x, qxl->virtual_y,
-					   qxl->fb, mode->stride);
+					   NULL, mode->stride);
 #if 0
     xf86DrvMsg(cache->qxl->pScrn->scrnIndex, X_ERROR,
                "testing dev_image memory (%d x %d)\n",
-- 
1.7.10.4


_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]