[Spice-devel] [PATCH qxl-win] display/surface: FreeSurfaceInfo: ignore double frees
Alon Levy
alevy at redhat.com
Mon Jun 20 03:59:51 PDT 2011
Cc: Yonit Halperin <yhalperi at redhat.com>
---
display/surface.h | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/display/surface.h b/display/surface.h
index e677610..0b7edb3 100644
--- a/display/surface.h
+++ b/display/surface.h
@@ -55,10 +55,16 @@ static _inline void FreeSurfaceInfo(PDev *pdev, UINT32 surface_id)
if (surface_id == 0) {
return;
}
-
EngAcquireSemaphore(pdev->Res->surface_sem);
+ DEBUG_PRINT((pdev, 9, "%s: %p: %d\n", __FUNCTION__, pdev, surface_id));
surface = &pdev->Res->surfaces_info[surface_id];
+ if (surface->draw_area.base_mem == NULL) {
+ DEBUG_PRINT((pdev, 9, "%s: %p: %d: double free. safely ignored\n", __FUNCTION__,
+ pdev, surface_id));
+ EngReleaseSemaphore(pdev->Res->surface_sem);
+ return;
+ }
surface->draw_area.base_mem = NULL; /* Mark as not used */
surface->u.next_free = pdev->Res->free_surfaces;
pdev->Res->free_surfaces = surface;
--
1.7.5.2
More information about the Spice-devel
mailing list