From e6ad1bc2c0fe21542cf32d895a35cd0d5d3c75b0 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Sat, 21 Feb 2004 23:30:18 +0000 Subject: [PATCH] - Fixed deadlock in IntFindWindowToRepaint. svn path=/trunk/; revision=8296 --- reactos/subsys/win32k/ntuser/painting.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/reactos/subsys/win32k/ntuser/painting.c b/reactos/subsys/win32k/ntuser/painting.c index 40b26434415..b7738e6676c 100644 --- a/reactos/subsys/win32k/ntuser/painting.c +++ b/reactos/subsys/win32k/ntuser/painting.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: painting.c,v 1.70 2004/02/21 22:22:26 navaraf Exp $ + * $Id: painting.c,v 1.71 2004/02/21 23:30:18 navaraf Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -560,7 +560,6 @@ IntFindWindowToRepaint(HWND hWnd, PW32THREAD Thread) } ExAcquireFastMutex(&Window->ChildrenListLock); - for (Child = Window->LastChild; Child; Child = Child->PrevSibling) { if (IntIsWindowDirty(Child) && @@ -570,21 +569,26 @@ IntFindWindowToRepaint(HWND hWnd, PW32THREAD Thread) break; } } + ExReleaseFastMutex(&Window->ChildrenListLock); if (hFoundWnd == NULL) { - for (Child = Window->LastChild; Child; Child = Child->PrevSibling) + HWND *List; + INT i; + + List = IntWinListChildren(Window); + if (List != NULL) { - if (Child->Style & WS_VISIBLE) + for (i = 0; List[i]; i++) { - hFoundWnd = IntFindWindowToRepaint(Child->Self, Thread); + hFoundWnd = IntFindWindowToRepaint(List[i], Thread); if (hFoundWnd != NULL) break; } + ExFreePool(List); } } - ExReleaseFastMutex(&Window->ChildrenListLock); IntReleaseWindowObject(Window); return hFoundWnd;