From e566195eaf2e251c2d73ea0ec93b90bc1c2fa9f5 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Tue, 2 Oct 2001 21:40:11 +0000
Subject: [PATCH] Free cache DCEs if the DC gets deleted.

---
 objects/dc.c  | 2 +-
 windows/dce.c | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/objects/dc.c b/objects/dc.c
index be38bf043e1..24b16ef6dc8 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -745,7 +745,7 @@ BOOL WINAPI DeleteDC( HDC hdc )
             DWORD data = dc->dwHookData;
             GDI_ReleaseObj( hdc );
             if (!proc( hdc, DCHC_DELETEDC, data, 0 )) return FALSE;
-            if (!(dc = DC_GetDCPtr( hdc ))) return FALSE;
+            if (!(dc = DC_GetDCPtr( hdc ))) return TRUE;  /* deleted by the hook */
         }
     }
 
diff --git a/windows/dce.c b/windows/dce.c
index 4e718e43bf4..d9cf0d7cae2 100644
--- a/windows/dce.c
+++ b/windows/dce.c
@@ -623,6 +623,7 @@ BOOL16 WINAPI DCHook16( HDC16 hDC, WORD code, DWORD data, LPARAM lParam )
                WARN("Application trying to delete a busy DC\n");
                retv = FALSE;
            }
+           else DCE_FreeDCE( dce );
 	   break;
 
       default:
-- 
GitLab