From 25004bb5b424960358fda4ba9d8438246c0bef9e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 8 Jul 2018 02:24:30 +0200 Subject: [PATCH 1/1] [WIN32K:NTUSER] Remove the hackish code that has been introduced in IntSendChildNCPaint() in r73532 (6d7fcc4b) to attempt to pseudo-fix CORE-12071 and CORE-12085 while breaking other stuff, amongst which CORE-14763 is one of the latest manifestations, and re-enable the correct original code. This fixes painting hangs under diverse situations, while CORE-12071 and CORE-12085 remain fixed. --- win32ss/user/ntuser/painting.c | 42 ++++++++-------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/win32ss/user/ntuser/painting.c b/win32ss/user/ntuser/painting.c index 5b4d04ff204..6a8b2a9bf73 100644 --- a/win32ss/user/ntuser/painting.c +++ b/win32ss/user/ntuser/painting.c @@ -366,38 +366,16 @@ IntSendNCPaint(PWND pWnd, HRGN hRgn) VOID FASTCALL IntSendChildNCPaint(PWND pWnd) { - PWND Child; - HWND *List, *phWnd; - - List = IntWinListChildren(UserGetDesktopWindow()); - if ( List ) - { - for (phWnd = List; *phWnd; ++phWnd) - { - Child = ValidateHwndNoErr(*phWnd); - if ( Child && Child->hrgnUpdate == NULL && Child->state & WNDS_SENDNCPAINT) - { - USER_REFERENCE_ENTRY Ref; - UserRefObjectCo(Child, &Ref); - IntSendNCPaint(Child, HRGN_WINDOW); - UserDerefObjectCo(Child); - } - } - ExFreePoolWithTag(List, USERTAG_WINDOWLIST); - } -/* FIXME : Use snap shot mode until window death is fixed while surfing menus! Fix CORE-12085 and CORE-12071. - pWnd = pWnd->spwndChild; - while(pWnd) - { - if (pWnd->hrgnUpdate == NULL && pWnd->state & WNDS_SENDNCPAINT) - { - USER_REFERENCE_ENTRY Ref; - UserRefObjectCo(pWnd, &Ref); - IntSendNCPaint(pWnd, HRGN_WINDOW); - UserDerefObjectCo(pWnd); - } - pWnd = pWnd->spwndNext; - }*/ + for (pWnd = pWnd->spwndChild; pWnd; pWnd = pWnd->spwndNext) + { + if ((pWnd->hrgnUpdate == NULL) && (pWnd->state & WNDS_SENDNCPAINT)) + { + USER_REFERENCE_ENTRY Ref; + UserRefObjectCo(pWnd, &Ref); + IntSendNCPaint(pWnd, HRGN_WINDOW); + UserDerefObjectCo(pWnd); + } + } } /* -- 2.17.1