- Fixed deadlock in IntFindWindowToRepaint.

svn path=/trunk/; revision=8296
This commit is contained in:
Filip Navara 2004-02-21 23:30:18 +00:00
parent f38fdd47c3
commit e6ad1bc2c0

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -560,7 +560,6 @@ IntFindWindowToRepaint(HWND hWnd, PW32THREAD Thread)
} }
ExAcquireFastMutex(&Window->ChildrenListLock); ExAcquireFastMutex(&Window->ChildrenListLock);
for (Child = Window->LastChild; Child; Child = Child->PrevSibling) for (Child = Window->LastChild; Child; Child = Child->PrevSibling)
{ {
if (IntIsWindowDirty(Child) && if (IntIsWindowDirty(Child) &&
@ -570,21 +569,26 @@ IntFindWindowToRepaint(HWND hWnd, PW32THREAD Thread)
break; break;
} }
} }
ExReleaseFastMutex(&Window->ChildrenListLock);
if (hFoundWnd == NULL) 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) if (hFoundWnd != NULL)
break; break;
} }
ExFreePool(List);
} }
} }
ExReleaseFastMutex(&Window->ChildrenListLock);
IntReleaseWindowObject(Window); IntReleaseWindowObject(Window);
return hFoundWnd; return hFoundWnd;