Index: head/editors/libreoffice/files/extrapatch-vcl_inc_unx_gtk_gtkinst.hxx =================================================================== --- head/editors/libreoffice/files/extrapatch-vcl_inc_unx_gtk_gtkinst.hxx (revision 464901) +++ head/editors/libreoffice/files/extrapatch-vcl_inc_unx_gtk_gtkinst.hxx (revision 464902) @@ -1,11 +1,11 @@ ---- vcl/inc/unx/gtk/gtkinst.hxx.orig 2016-10-28 14:50:26 UTC +--- vcl/inc/unx/gtk/gtkinst.hxx.orig 2018-02-22 17:45:41 UTC +++ vcl/inc/unx/gtk/gtkinst.hxx @@ -46,7 +46,7 @@ class GtkPrintWrapper; class GenPspGraphics; class GtkYieldMutex : public SalYieldMutex { - thread_local static std::stack yieldCounts; + std::list aYieldStack; public: GtkYieldMutex() {} Index: head/editors/libreoffice/files/extrapatch-vcl_unx_gtk_gtkinst.cxx =================================================================== --- head/editors/libreoffice/files/extrapatch-vcl_unx_gtk_gtkinst.cxx (revision 464901) +++ head/editors/libreoffice/files/extrapatch-vcl_unx_gtk_gtkinst.cxx (revision 464902) @@ -1,42 +1,42 @@ ---- vcl/unx/gtk/gtkinst.cxx.orig 2016-11-13 15:24:04 UTC +--- vcl/unx/gtk/gtkinst.cxx.orig 2018-02-22 17:45:41 UTC +++ vcl/unx/gtk/gtkinst.cxx -@@ -298,28 +298,29 @@ SalPrinter* GtkInstance::CreatePrinter( +@@ -302,28 +302,29 @@ SalPrinter* GtkInstance::CreatePrinter( * for each pair, so we can accurately restore * it later. */ -thread_local std::stack 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; ++ aYieldStack.push_front( m_nCount ); + assert(m_nCount != 0); +- auto n = m_nCount - 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 ) ++ m_nThreadId && m_nThreadId != osl::Thread::getCurrentIdentifier(), ++ "vcl.gtk", "other thread " << m_nThreadId << " owns the mutex"); ++ while( m_nCount > 1 ) release(); - } + release(); } SalVirtualDevice* GtkInstance::CreateVirtualDevice( SalGraphics *pG,