diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2024-02-01 11:46:53 +0600 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2024-02-01 11:22:17 +0100 |
commit | 575a713aae2beb4402ea9c41802311966329b8ea (patch) | |
tree | e48b206ce4e5625d2c47d7e7ed99cb3df1117128 /sw/source | |
parent | 7eade23bc642ef7270a24cfbc25761fc413170c8 (diff) |
tdf#159493: hold solar mutex in TimerUpdate
Several functions called from here check that the mutex is
held, specifically:
=== call stack 1 ===
tllo.dll!DbgTestSolarMutex()
at C:\lo\core\tools\source\debug\debug.cxx(55)
swlo.dll!SwTextBoxHelper::isTextBox(const SwFrameFormat * pFormat, unsigned short nType, const SdrObject * pObject)
at C:\lo\core\sw\source\core\doc\textboxhelper.cxx(300)
swlo.dll!SwDoc::GetFlyCount(FlyCntType eType, bool bIgnoreTextBoxes)
at C:\lo\core\sw\source\core\doc\docfly.cxx(76)
swlo.dll!SwFEShell::GetFlyCount(FlyCntType eType, bool bIgnoreTextBoxes)
at C:\lo\core\sw\source\core\frmedt\feshview.cxx(2557)
swlo.dll!SwContentType::FillMemberList(bool * pbContentChanged)
at C:\lo\core\sw\source\uibase\utlui\content.cxx(585)
swlo.dll!SwContentTree::HasContentChanged()
at C:\lo\core\sw\source\uibase\utlui\content.cxx(3431)
swlo.dll!SwContentTree::TimerUpdate(Timer * __formal)
at C:\lo\core\sw\source\uibase\utlui\content.cxx(4174)
...
=== call stack 2 ===
tllo.dll!DbgTestSolarMutex()
at C:\lo\core\tools\source\debug\debug.cxx(55)
vcllo.dll!OutputDevice::SetDeviceClipRegion(const vcl::Region * pRegion)
at C:\lo\core\vcl\source\outdev\clipping.cxx(205)
vcllo.dll!OutputDevice::SetClipRegion(const vcl::Region & rRegion)
at C:\lo\core\vcl\source\outdev\clipping.cxx(66)
vcllo.dll!SvImpLBox::ShowCursor(bool bShow)
at C:\lo\core\vcl\source\treelist\svimpbox.cxx(654)
vcllo.dll!SvImpLBox::UpdateAll()
at C:\lo\core\vcl\source\treelist\svimpbox.cxx(680)
vcllo.dll!SvImpLBox::SetUpdateMode(bool bMode)
at C:\lo\core\vcl\source\treelist\svimpbox.cxx(2996)
vcllo.dll!SvTreeListBox::SetUpdateMode(bool bUpdate)
at C:\lo\core\vcl\source\treelist\treelistbox.cxx(2306)
vcllo.dll!SalInstanceTreeView::thaw()
at C:\lo\core\vcl\source\app\salvtables.cxx(3938)
swlo.dll!SwContentTree::clear()
at C:\lo\core\sw\source\uibase\utlui\content.cxx(3018)
swlo.dll!SwContentTree::Display(bool bActive)
at C:\lo\core\sw\source\uibase\utlui\content.cxx(2853)
swlo.dll!SwContentTree::TimerUpdate(Timer * __formal)
at C:\lo\core\sw\source\uibase\utlui\content.cxx(4181)
...
Change-Id: I643f5984d4678f8062f20bf341bfad6e8462526b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162865
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/uibase/utlui/content.cxx | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index 905043ce9716..5655b67ceab1 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -4170,7 +4170,8 @@ IMPL_LINK_NOARG(SwContentTree, TimerUpdate, Timer *, void) { SetActiveShell(pActShell); } - else if ((State::ACTIVE == m_eState || (State::CONSTANT == m_eState && pActShell == GetWrtShell())) && + else if (SolarMutexGuard aGuard; + (State::ACTIVE == m_eState || (State::CONSTANT == m_eState && pActShell == GetWrtShell())) && HasContentChanged()) { FindActiveTypeAndRemoveUserData(); |