summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-03-13 09:36:46 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-03-16 07:52:46 +0100
commitcda7357a82b3be7b60cc314cecbc59922beda629 (patch)
tree0e5176025c1253802f16fe54da03b7d2b2d0647a /vcl
parent8ff147f200e6514bbc7e7d7b5ca91694b9234bfc (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.cxx5
-rw-r--r--vcl/source/control/prgsbar.cxx2
-rw-r--r--vcl/source/window/dialog.cxx2
-rw-r--r--vcl/source/window/menufloatingwindow.cxx2
-rw-r--r--vcl/source/window/syswin.cxx2
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();
}