diff options
author | Michael Stahl <mstahl@redhat.com> | 2016-05-03 17:17:52 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2016-05-03 22:35:31 +0200 |
commit | ea3ce0b3073c72f474365e438ddabd19de915b76 (patch) | |
tree | d5575b77e4d4f03e29cd7ba0e30149b5b8fc19bd | |
parent | 7ecaf61287606001eac9b3d76df95a0a900e11c0 (diff) |
tdf#99383 vcl: don't dispatch events from SolarMutexReleaser
Having SolarMutexReleaser effectively do Reschedule() on WNT and not on
other platforms doesn't seem such a good idea. Let's try to restrict it
so that it still calls ImplSalYieldMutexAcquireWithWait() but no longer
dispatches messages, timers and idles.
(regression from 482c52e91fe41a52e68827e9bf64a9736427d517)
Change-Id: I52a2c88e9c2473e35909bf270b9e3ae7acbe0d17
-rw-r--r-- | vcl/source/app/svapp.cxx | 7 | ||||
-rw-r--r-- | vcl/win/app/salinst.cxx | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index ef785b897e57..f6860e3b0c7a 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -517,8 +517,11 @@ inline bool ImplYield(bool i_bWait, bool i_bAllEvents, sal_uLong const nReleased DBG_TESTSOLARMUTEX(); // must be locked on return from Yield - // Process all Tasks - Scheduler::ProcessTaskScheduling(eResult == SalYieldResult::EVENT); + if (nReleased == 0) // tdf#99383 don't run stuff from ReAcquireSolarMutex + { + // Process all Tasks + Scheduler::ProcessTaskScheduling(eResult == SalYieldResult::EVENT); + } // flush lazy deleted objects if( pSVData->maAppData.mnDispatchLevel == 0 ) diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx index bd5b49e1d219..4ca2a6442499 100644 --- a/vcl/win/app/salinst.cxx +++ b/vcl/win/app/salinst.cxx @@ -646,7 +646,10 @@ SalYieldResult WinSalInstance::DoYield(bool bWait, bool bHandleAllCurrentEvents, } else { - eDidWork = ImplSalYield( bWait, bHandleAllCurrentEvents ); + if (nReleased == 0) // tdf#99383 ReAcquireSolarMutex shouldn't Yield + { + eDidWork = ImplSalYield( bWait, bHandleAllCurrentEvents ); + } n = nCount; while ( n ) |