[Libreoffice-commits] core.git: 3 commits - sw/inc sw/source
Bjoern Michaelsen
bjoern.michaelsen at canonical.com
Tue Nov 10 15:23:14 PST 2015
sw/inc/calbck.hxx | 8 ++-----
sw/source/core/attr/calbck.cxx | 44 +++++++++++++++------------------------
sw/source/core/table/swtable.cxx | 2 -
3 files changed, 22 insertions(+), 32 deletions(-)
New commits:
commit 938cd22ae87d7098143a0e18e1e348479cdf69e9
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Tue Nov 10 22:50:47 2015 +0100
remove b_mInDocDTOR flag altogether
Change-Id: I09ca56854f23fe1fc452648042990bee29082f88
diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx
index f718507..dcd6dc9 100644
--- a/sw/inc/calbck.hxx
+++ b/sw/inc/calbck.hxx
@@ -149,7 +149,6 @@ class SW_DLLPUBLIC SwModify: public SwClient
sw::WriterListener* m_pWriterListeners; // the start of the linked list of clients
bool m_bModifyLocked : 1; // don't broadcast changes now
bool m_bLockClientList : 1; // may be set when this instance notifies its clients
- bool m_bInDocDTOR : 1; // workaround for problems when a lot of objects are destroyed
bool m_bInCache : 1;
bool m_bInSwFntCache : 1;
@@ -162,10 +161,10 @@ class SW_DLLPUBLIC SwModify: public SwClient
SwModify &operator =(const SwModify&) = delete;
public:
SwModify()
- : SwClient(nullptr), m_pWriterListeners(nullptr), m_bModifyLocked(false), m_bLockClientList(false), m_bInDocDTOR(false), m_bInCache(false), m_bInSwFntCache(false)
+ : SwClient(nullptr), m_pWriterListeners(nullptr), m_bModifyLocked(false), m_bLockClientList(false), m_bInCache(false), m_bInSwFntCache(false)
{}
explicit SwModify( SwModify* pToRegisterIn )
- : SwClient(pToRegisterIn), m_pWriterListeners(nullptr), m_bModifyLocked(false), m_bLockClientList(false), m_bInDocDTOR(false), m_bInCache(false), m_bInSwFntCache(false)
+ : SwClient(pToRegisterIn), m_pWriterListeners(nullptr), m_bModifyLocked(false), m_bLockClientList(false), m_bInCache(false), m_bInSwFntCache(false)
{}
// broadcasting: send notifications to all clients
diff --git a/sw/source/core/attr/calbck.cxx b/sw/source/core/attr/calbck.cxx
index 51a188c..d7ec7cd 100644
--- a/sw/source/core/attr/calbck.cxx
+++ b/sw/source/core/attr/calbck.cxx
@@ -77,13 +77,13 @@ void SwClient::Modify(SfxPoolItem const*const pOldValue, SfxPoolItem const*const
void SwModify::SetInDocDTOR()
{
- m_bInDocDTOR = true;
// If the document gets destroyed anyway, just tell clients to
// forget me so that they don't try to get removed from my list
// later when they also get destroyed
SwIterator<SwClient,SwModify> aIter(*this);
for(SwClient* pClient = aIter.First(); pClient; pClient = aIter.Next())
pClient->pRegisteredIn = nullptr;
+ m_pWriterListeners = nullptr;
}
SwModify::~SwModify()
@@ -97,8 +97,6 @@ SwModify::~SwModify()
if ( IsInSwFntCache() )
pSwFontCache->Delete( this );
- if(m_bInDocDTOR)
- return;
// notify all clients that they shall remove themselves
SwPtrMsgPoolItem aDyObject( RES_OBJECTDYING, this );
NotifyClients( &aDyObject, &aDyObject );
@@ -203,9 +201,6 @@ void SwModify::Add( SwClient* pDepend )
SwClient* SwModify::Remove( SwClient* pDepend )
{
- if(m_bInDocDTOR)
- return nullptr;
-
DBG_TESTSOLARMUTEX();
assert(pDepend->pRegisteredIn == this);
commit f93a2e530d94c4ef73e234b8cc5d3dd79977a8c8
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Tue Nov 10 22:12:59 2015 +0100
reduce branch depth in SwModify dtor
Change-Id: I82046cfc191425dc830125944214293b5b9197f9
diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx
index b56575d..f718507 100644
--- a/sw/inc/calbck.hxx
+++ b/sw/inc/calbck.hxx
@@ -192,7 +192,7 @@ public:
void UnlockModify() { m_bModifyLocked = false; }
void SetInCache( bool bNew ) { m_bInCache = bNew; }
void SetInSwFntCache( bool bNew ) { m_bInSwFntCache = bNew; }
- void SetInDocDTOR() { m_bInDocDTOR = true; }
+ void SetInDocDTOR();
bool IsModifyLocked() const { return m_bModifyLocked; }
bool IsInCache() const { return m_bInCache; }
bool IsInSwFntCache() const { return m_bInSwFntCache; }
diff --git a/sw/source/core/attr/calbck.cxx b/sw/source/core/attr/calbck.cxx
index fb6654e..51a188c 100644
--- a/sw/source/core/attr/calbck.cxx
+++ b/sw/source/core/attr/calbck.cxx
@@ -75,6 +75,17 @@ void SwClient::Modify(SfxPoolItem const*const pOldValue, SfxPoolItem const*const
CheckRegistration( pOldValue, pNewValue );
}
+void SwModify::SetInDocDTOR()
+{
+ m_bInDocDTOR = true;
+ // If the document gets destroyed anyway, just tell clients to
+ // forget me so that they don't try to get removed from my list
+ // later when they also get destroyed
+ SwIterator<SwClient,SwModify> aIter(*this);
+ for(SwClient* pClient = aIter.First(); pClient; pClient = aIter.Next())
+ pClient->pRegisteredIn = nullptr;
+}
+
SwModify::~SwModify()
{
DBG_TESTSOLARMUTEX();
@@ -86,30 +97,16 @@ SwModify::~SwModify()
if ( IsInSwFntCache() )
pSwFontCache->Delete( this );
- if( m_pWriterListeners )
- {
- // there are depending objects
- if( m_bInDocDTOR )
- {
- // If the document gets destroyed anyway, just tell clients to
- // forget me so that they don't try to get removed from my list
- // later when they also get destroyed
- SwIterator<SwClient,SwModify> aIter(*this);
- for(SwClient* pClient = aIter.First(); pClient; pClient = aIter.Next())
- pClient->pRegisteredIn = nullptr;
- }
- else
- {
- // notify all clients that they shall remove themselves
- SwPtrMsgPoolItem aDyObject( RES_OBJECTDYING, this );
- NotifyClients( &aDyObject, &aDyObject );
-
- // remove all clients that have not done themselves
- // mba: possibly a hotfix for forgotten base class calls?!
- while( m_pWriterListeners )
- static_cast<SwClient*>(m_pWriterListeners)->CheckRegistration( &aDyObject, &aDyObject );
- }
- }
+ if(m_bInDocDTOR)
+ return;
+ // notify all clients that they shall remove themselves
+ SwPtrMsgPoolItem aDyObject( RES_OBJECTDYING, this );
+ NotifyClients( &aDyObject, &aDyObject );
+
+ // remove all clients that have not done themselves
+ // mba: possibly a hotfix for forgotten base class calls?!
+ while( m_pWriterListeners )
+ static_cast<SwClient*>(m_pWriterListeners)->CheckRegistration( &aDyObject, &aDyObject );
}
void SwModify::NotifyClients( const SfxPoolItem* pOldValue, const SfxPoolItem* pNewValue )
commit 0b0d80bd30f918d8c8f3eb6926ced2a562ec912a
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Tue Nov 10 21:56:47 2015 +0100
remove IsInDocDTOR() as a public member
Change-Id: Ic4d29d6904d5631dbf2f755886ac9122c303553f
diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx
index ecf400b..b56575d 100644
--- a/sw/inc/calbck.hxx
+++ b/sw/inc/calbck.hxx
@@ -194,7 +194,6 @@ public:
void SetInSwFntCache( bool bNew ) { m_bInSwFntCache = bNew; }
void SetInDocDTOR() { m_bInDocDTOR = true; }
bool IsModifyLocked() const { return m_bModifyLocked; }
- bool IsInDocDTOR() const { return m_bInDocDTOR; }
bool IsInCache() const { return m_bInCache; }
bool IsInSwFntCache() const { return m_bInSwFntCache; }
diff --git a/sw/source/core/attr/calbck.cxx b/sw/source/core/attr/calbck.cxx
index 0ba6a74..fb6654e 100644
--- a/sw/source/core/attr/calbck.cxx
+++ b/sw/source/core/attr/calbck.cxx
@@ -89,7 +89,7 @@ SwModify::~SwModify()
if( m_pWriterListeners )
{
// there are depending objects
- if( IsInDocDTOR() )
+ if( m_bInDocDTOR )
{
// If the document gets destroyed anyway, just tell clients to
// forget me so that they don't try to get removed from my list
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index f27f315..8cb9d0e 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -2171,7 +2171,7 @@ void ChgNumToText( SwTableBox& rBox, sal_uLong nFormat )
// for detection of modifications (mainly TableBoxAttribute)
void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
{
- if( !IsModifyLocked() && !IsInDocDTOR() )
+ if( !IsModifyLocked() && GetDoc() && !GetDoc()->IsInDtor())
{
const SwTableBoxNumFormat *pNewFormat = nullptr;
const SwTableBoxFormula *pNewFormula = nullptr;
More information about the Libreoffice-commits
mailing list