[Spice-devel] [PATCH] Simplify memory management for the primary screen.
Jeremy White
jwhite at codeweavers.com
Thu Sep 13 07:57:06 PDT 2012
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
More information about the Spice-devel
mailing list