summaryrefslogtreecommitdiff
path: root/drawinglayer
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2025-04-01 08:21:41 +0200
committerNoel Grandin <noelgrandin@gmail.com>2025-04-01 10:47:22 +0200
commitf8f5c1837c0382de40bdcbc5017e62ab13dbcb04 (patch)
tree72f1e6722aa6fa83773f39b49162bfb4ce270ab4 /drawinglayer
parenta2c58edd20f243697a0790d323816094e319b2a7 (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.cxx15
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));
}