diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2021-03-13 09:36:46 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-03-16 07:52:46 +0100 |
commit | cda7357a82b3be7b60cc314cecbc59922beda629 (patch) | |
tree | 0e5176025c1253802f16fe54da03b7d2b2d0647a /vcl | |
parent | 8ff147f200e6514bbc7e7d7b5ca91694b9234bfc (diff) |
check for quit when calling Yield in loop
so we don't get stuck threads when the main application
quits
Change-Id: Id36e99267ceb4154873b6ef8ef494622fff6c19a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112409
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
(cherry picked from commit c880d3e30405342a5ae6239cc77f69ed3ca6cc15)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112491
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/app/svapp.cxx | 5 | ||||
-rw-r--r-- | vcl/source/control/prgsbar.cxx | 2 | ||||
-rw-r--r-- | vcl/source/window/dialog.cxx | 2 | ||||
-rw-r--r-- | vcl/source/window/menufloatingwindow.cxx | 2 | ||||
-rw-r--r-- | vcl/source/window/syswin.cxx | 2 |
5 files changed, 9 insertions, 4 deletions
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index 34227013dc23..5831987937f7 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -572,6 +572,11 @@ bool Application::IsInExecute() return ImplGetSVData()->maAppData.mbInAppExecute; } +bool Application::IsQuit() +{ + return ImplGetSVData()->maAppData.mbAppQuit; +} + bool Application::IsInModalMode() { return (ImplGetSVData()->maAppData.mnModalMode != 0); diff --git a/vcl/source/control/prgsbar.cxx b/vcl/source/control/prgsbar.cxx index 16ec32de0597..d99ade44ec88 100644 --- a/vcl/source/control/prgsbar.cxx +++ b/vcl/source/control/prgsbar.cxx @@ -182,7 +182,7 @@ void ProgressBar::SetValue( sal_uInt16 nNewPercent ) Idle aIdle("ProgressBar::SetValue aIdle"); aIdle.SetPriority(TaskPriority::POST_PAINT); aIdle.Start(); - while (aIdle.IsActive()) + while (aIdle.IsActive() && !Application::IsQuit()) { Application::Yield(); } diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index 83fa562023ce..bf6bf188f14c 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -1050,7 +1050,7 @@ short Dialog::Execute() // Yield util EndDialog is called or dialog gets destroyed // (the latter should not happen, but better safe than sorry - while ( !xWindow->IsDisposed() && mbInExecute ) + while ( !xWindow->IsDisposed() && mbInExecute && !Application::IsQuit() ) Application::Yield(); ImplEndExecuteModal(); diff --git a/vcl/source/window/menufloatingwindow.cxx b/vcl/source/window/menufloatingwindow.cxx index 753c3b7282ff..cd95b076ac3d 100644 --- a/vcl/source/window/menufloatingwindow.cxx +++ b/vcl/source/window/menufloatingwindow.cxx @@ -455,7 +455,7 @@ void MenuFloatingWindow::Execute() Start(); - while (bInExecute) + while (bInExecute && !Application::IsQuit()) Application::Yield(); pSVData->maAppData.mpActivePopupMenu = nullptr; diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx index 9d2a0b671c66..f0f1e1744749 100644 --- a/vcl/source/window/syswin.cxx +++ b/vcl/source/window/syswin.cxx @@ -1188,7 +1188,7 @@ void SystemWindow::ensureRepaint() Invalidate(); mbPaintComplete = false; - while (!mbPaintComplete) + while (!mbPaintComplete && !Application::IsQuit()) { Application::Yield(); } |