diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2025-04-01 08:21:41 +0200 |
---|---|---|
committer | Noel Grandin <noelgrandin@gmail.com> | 2025-04-01 10:47:22 +0200 |
commit | f8f5c1837c0382de40bdcbc5017e62ab13dbcb04 (patch) | |
tree | 72f1e6722aa6fa83773f39b49162bfb4ce270ab4 /drawinglayer | |
parent | a2c58edd20f243697a0790d323816094e319b2a7 (diff) |
take solarmutex in BufferedDecompositionFlusher
when clearing objects, I have seen a crash on macos which happens inside
skia
Change-Id: I8328439917339242d56d813f518e05bbd92adc60
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183572
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'drawinglayer')
-rw-r--r-- | drawinglayer/source/primitive2d/BufferedDecompositionFlusher.cxx | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drawinglayer/source/primitive2d/BufferedDecompositionFlusher.cxx b/drawinglayer/source/primitive2d/BufferedDecompositionFlusher.cxx index 97f7696a7575..d65ea068bb2b 100644 --- a/drawinglayer/source/primitive2d/BufferedDecompositionFlusher.cxx +++ b/drawinglayer/source/primitive2d/BufferedDecompositionFlusher.cxx @@ -19,7 +19,7 @@ #include <sal/config.h> #include <sal/log.hxx> - +#include <comphelper/solarmutex.hxx> #include <drawinglayer/primitive2d/BufferedDecompositionFlusher.hxx> namespace drawinglayer::primitive2d @@ -128,10 +128,15 @@ void SAL_CALL BufferedDecompositionFlusher::run() } } - for (const auto& r : aRemoved1) - r->setBuffered2DDecomposition(nullptr); - for (const auto& r : aRemoved2) - r->setBuffered2DDecomposition(Primitive2DContainer{}); + { + // some parts of skia do not take kindly to being accessed from multiple threads + osl::Guard<comphelper::SolarMutex> aGuard(comphelper::SolarMutex::get()); + + for (const auto& r : aRemoved1) + r->setBuffered2DDecomposition(nullptr); + for (const auto& r : aRemoved2) + r->setBuffered2DDecomposition(Primitive2DContainer{}); + } wait(TimeValue(2, 0)); } |