From 61def30efea81f36be03643532297b4dd464d259 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Tue, 1 Jul 2025 20:16:40 +0300 Subject: [PATCH] miext: damage: revert 46f2a97c187020f99a8b61ab39ffa74a65dacff1 That commit causes damageCloseScreen to be called when is shouldn't be. damageCloseScreen sets damageScrPriv(pScreen) to NULL This causes segfaults when pScrPriv->funcs.{Unregister,Destroy} are later called. Signed-off-by: stefan11111 --- miext/damage/damage.c | 15 +++++++-------- miext/damage/damagestr.h | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/miext/damage/damage.c b/miext/damage/damage.c index 56f24d756..c171af319 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -1567,21 +1567,20 @@ damageWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pWindow) } } -static void damageCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) +static Bool +damageCloseScreen(ScreenPtr pScreen) { - dixScreenUnhookClose(pScreen, damageCloseScreen); + damageScrPriv(pScreen); + dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy); dixScreenUnhookPixmapDestroy(pScreen, damagePixmapDestroy); - damageScrPriv(pScreen); - if (!pScrPriv) - return; - unwrap(pScrPriv, pScreen, CreateGC); unwrap(pScrPriv, pScreen, CopyWindow); + unwrap(pScrPriv, pScreen, CloseScreen); - dixSetPrivate(&pScreen->devPrivates, damageScrPrivateKey, NULL); free(pScrPriv); + return (*pScreen->CloseScreen) (pScreen); } /** @@ -1667,13 +1666,13 @@ DamageSetup(ScreenPtr pScreen) pScrPriv->internalLevel = 0; pScrPriv->pScreenDamage = 0; - dixScreenHookClose(pScreen, damageCloseScreen); dixScreenHookWindowDestroy(pScreen, damageWindowDestroy); dixScreenHookPixmapDestroy(pScreen, damagePixmapDestroy); wrap(pScrPriv, pScreen, CreateGC, damageCreateGC); wrap(pScrPriv, pScreen, SetWindowPixmap, damageSetWindowPixmap); wrap(pScrPriv, pScreen, CopyWindow, damageCopyWindow); + wrap(pScrPriv, pScreen, CloseScreen, damageCloseScreen); if (ps) { wrap(pScrPriv, ps, Glyphs, damageGlyphs); wrap(pScrPriv, ps, Composite, damageComposite); diff --git a/miext/damage/damagestr.h b/miext/damage/damagestr.h index 5517d24e0..9b395c55e 100644 --- a/miext/damage/damagestr.h +++ b/miext/damage/damagestr.h @@ -61,7 +61,7 @@ typedef struct _damageScrPriv { DamagePtr pScreenDamage; CopyWindowProcPtr CopyWindow; - void *_dummy1; // required in place of a removed field for ABI compatibility + CloseScreenProcPtr CloseScreen; CreateGCProcPtr CreateGC; void *_dummy2; // required in place of a removed field for ABI compatibility SetWindowPixmapProcPtr SetWindowPixmap;