diff --git a/src/kits/app/Looper.cpp b/src/kits/app/Looper.cpp index b69e0a7746..8121a02b95 100644 --- a/src/kits/app/Looper.cpp +++ b/src/kits/app/Looper.cpp @@ -1250,6 +1250,10 @@ BLooper::task_looper() gDefaultTokens.GetToken(messagePrivate.GetTarget(), B_HANDLER_TOKEN, (void **)&handler); + // if this handler doesn't belong to us, we drop the message + if (handler != NULL && handler->Looper() != this) + handler = NULL; + PRINT(("LOOPER: use %ld, handler: %p, this: %p\n", messagePrivate.GetTarget(), handler, this)); } @@ -1271,6 +1275,11 @@ BLooper::task_looper() } } + if (fTerminating) { + // we leave the looper locked when we quit + return; + } + // Unlock the looper Unlock(); diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index 6c47db0abc..85128b6893 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -2248,6 +2248,10 @@ BWindow::task_looper() } else { gDefaultTokens.GetToken(messagePrivate.GetTarget(), B_HANDLER_TOKEN, (void **)&handler); + + // if this handler doesn't belong to us, we drop the message + if (handler != NULL && handler->Looper() != this) + handler = NULL; } if (handler == NULL || usePreferred) @@ -2280,6 +2284,11 @@ BWindow::task_looper() } } + if (fTerminating) { + // we leave the looper locked when we quit + return; + } + Unlock(); // Are any messages on the port?