app_server: Remove window token first in ~ServerWindow.
This way, if the Desktop has locked its window list, RemoveWindow will wait until the lock is released, at which time we're guaranteed that the Desktop object will no longer be using this window. May fix #19750 and related tickets.
This commit is contained in:
@@ -202,9 +202,12 @@ ServerWindow::~ServerWindow()
|
||||
{
|
||||
STRACE(("ServerWindow(%s@%p):~ServerWindow()\n", fTitle, this));
|
||||
|
||||
BPrivate::gDefaultTokens.RemoveToken(fServerToken);
|
||||
|
||||
if (!fWindow->IsOffscreenWindow()) {
|
||||
fWindowAddedToDesktop = false;
|
||||
fDesktop->RemoveWindow(fWindow.Get());
|
||||
fDesktop = NULL;
|
||||
}
|
||||
|
||||
if (App() != NULL) {
|
||||
@@ -217,8 +220,6 @@ ServerWindow::~ServerWindow()
|
||||
free(fTitle);
|
||||
delete_port(fMessagePort);
|
||||
|
||||
BPrivate::gDefaultTokens.RemoveToken(fServerToken);
|
||||
|
||||
fDirectWindowInfo.Unset(); // TODO: is it really needed?
|
||||
STRACE(("ServerWindow(%p) will exit NOW\n", this));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user