- Fixed deadlock in IntFindWindowToRepaint.
authorFilip Navara <filip.navara@gmail.com>
Sat, 21 Feb 2004 23:30:18 +0000 (23:30 +0000)
committerFilip Navara <filip.navara@gmail.com>
Sat, 21 Feb 2004 23:30:18 +0000 (23:30 +0000)
svn path=/trunk/; revision=8296

reactos/subsys/win32k/ntuser/painting.c

index 40b2643..b7738e6 100644 (file)
@@ -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;