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:
Augustin Cavalier
2025-11-25 18:46:21 -05:00
parent fed6a37b4f
commit 5373300610
+3 -2
View File
@@ -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));