summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--display/surface.h8
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;