From c2a8fd9b7076db45e7a372254cb6a5030dc74ee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 17 Oct 2008 15:48:29 +0000 Subject: [PATCH] * AS_ACTIVATE_WINDOW must not hold a window lock when calling Desktop::ActivateWindow(), or Desktop::SendWindowBehind(). * This fixes a potential deadlock. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28217 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/ServerWindow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index b0f8585fc2..615247d926 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -672,10 +672,14 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) link.Read(&activate); + fDesktop->UnlockSingleWindow(); + if (activate) fDesktop->ActivateWindow(fWindow); else fDesktop->SendWindowBehind(fWindow, NULL); + + fDesktop->LockSingleWindow(); break; } case AS_SEND_BEHIND: @@ -3437,7 +3441,6 @@ bool ServerWindow::_MessageNeedsAllWindowsLocked(uint32 code) const { switch (code) { - case AS_ACTIVATE_WINDOW: case AS_SET_WINDOW_TITLE: case AS_ADD_TO_SUBSET: case AS_REMOVE_FROM_SUBSET: