summaryrefslogtreecommitdiff
path: root/editors/libreoffice/files/patch-vcl_unx_gtk_gtkinst.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'editors/libreoffice/files/patch-vcl_unx_gtk_gtkinst.cxx')
-rw-r--r--editors/libreoffice/files/patch-vcl_unx_gtk_gtkinst.cxx42
1 files changed, 42 insertions, 0 deletions
diff --git a/editors/libreoffice/files/patch-vcl_unx_gtk_gtkinst.cxx b/editors/libreoffice/files/patch-vcl_unx_gtk_gtkinst.cxx
new file mode 100644
index 000000000000..b53a62613794
--- /dev/null
+++ b/editors/libreoffice/files/patch-vcl_unx_gtk_gtkinst.cxx
@@ -0,0 +1,42 @@
+--- vcl/unx/gtk/gtkinst.cxx.orig 2016-11-13 15:24:04 UTC
++++ vcl/unx/gtk/gtkinst.cxx
+@@ -298,28 +298,29 @@ SalPrinter* GtkInstance::CreatePrinter(
+ * for each pair, so we can accurately restore
+ * it later.
+ */
+-thread_local std::stack<sal_uIntPtr> GtkYieldMutex::yieldCounts;
+
+ void GtkYieldMutex::ThreadsEnter()
+ {
+ acquire();
+- if (!yieldCounts.empty()) {
+- auto n = yieldCounts.top();
+- yieldCounts.pop();
+- for (; n != 0; --n) {
++ if( !aYieldStack.empty() )
++ { /* Previously called ThreadsLeave() */
++ sal_uLong nCount = aYieldStack.front();
++ aYieldStack.pop_front();
++ while( nCount-- > 1 )
+ acquire();
+- }
+ }
+ }
+
+ void GtkYieldMutex::ThreadsLeave()
+ {
++ aYieldStack.push_front( mnCount );
+ assert(mnCount != 0);
+- auto n = mnCount - 1;
+- yieldCounts.push(n);
+- for (sal_uIntPtr i = 0; i != n + 1; ++i) {
++ SAL_WARN_IF(
++ mnThreadId && mnThreadId != osl::Thread::getCurrentIdentifier(),
++ "vcl.gtk", "other thread " << mnThreadId << " owns the mutex");
++ while( mnCount > 1 )
+ release();
+- }
++ release();
+ }
+
+ SalVirtualDevice* GtkInstance::CreateVirtualDevice( SalGraphics *pG,