summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2015-03-23 09:14:13 +0000
committerMichael Meeks <michael.meeks@collabora.com>2015-04-10 13:06:20 +0100
commit0e491a7a2affbb08071e6378dacc1995cb301655 (patch)
treec93205745e1fcd69ff508a3d04aa064bb90606ae
parentprotect more printer code-paths. (diff)
downloadcore-0e491a7a2affbb08071e6378dacc1995cb301655.tar.gz
core-0e491a7a2affbb08071e6378dacc1995cb301655.zip
vclptr: add isDisposed method - and assert for it here & there.
Change-Id: I2b154e0ed9eee0a45900ada7f805a1d444a31bc0
-rw-r--r--include/vcl/outdev.hxx1
-rw-r--r--sw/source/core/doc/DocumentDeviceManager.cxx7
-rw-r--r--sw/source/uibase/uno/SwXDocumentSettings.cxx3
-rw-r--r--vcl/README.lifecycle4
-rw-r--r--vcl/source/outdev/font.cxx5
5 files changed, 18 insertions, 2 deletions
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index b9d542fed31f..f5875b7ccea1 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -390,6 +390,7 @@ protected:
public:
/// call the dispose() method if we have not already been disposed.
void disposeOnce();
+ bool isDisposed() const { return mbDisposed; }
public:
diff --git a/sw/source/core/doc/DocumentDeviceManager.cxx b/sw/source/core/doc/DocumentDeviceManager.cxx
index 5d38a936b13a..a8ef613150aa 100644
--- a/sw/source/core/doc/DocumentDeviceManager.cxx
+++ b/sw/source/core/doc/DocumentDeviceManager.cxx
@@ -65,6 +65,7 @@ SfxPrinter* DocumentDeviceManager::getPrinter(/*[in]*/ bool bCreate ) const
void DocumentDeviceManager::setPrinter(/*[in]*/ SfxPrinter *pP,/*[in]*/ bool bDeleteOld,/*[in]*/ bool bCallPrtDataChanged )
{
+ assert ( !pP->isDisposed() );
if ( pP != mpPrt )
{
if ( bDeleteOld )
@@ -100,11 +101,15 @@ VirtualDevice* DocumentDeviceManager::getVirtualDevice(/*[in]*/ bool bCreate ) c
else
pRet = &CreateVirtualDevice_();
+ assert ( !pRet->isDisposed() );
+
return pRet;
}
void DocumentDeviceManager::setVirtualDevice(/*[in]*/ VirtualDevice* pVd,/*[in]*/ bool bDeleteOld, /*[in]*/ bool )
{
+ assert ( !pVd->isDisposed() );
+
if ( mpVirDev.get() != pVd )
{
if ( bDeleteOld )
@@ -133,6 +138,8 @@ OutputDevice* DocumentDeviceManager::getReferenceDevice(/*[in]*/ bool bCreate )
pRet = getVirtualDevice( bCreate );
}
+ assert ( !pRet->isDisposed() );
+
return pRet;
}
diff --git a/sw/source/uibase/uno/SwXDocumentSettings.cxx b/sw/source/uibase/uno/SwXDocumentSettings.cxx
index 6b947227cf77..9ae2d42068f2 100644
--- a/sw/source/uibase/uno/SwXDocumentSettings.cxx
+++ b/sw/source/uibase/uno/SwXDocumentSettings.cxx
@@ -389,6 +389,7 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf
if ( OUString ( pPrinter->GetName()) != sPrinterName )
{
VclPtr<SfxPrinter> pNewPrinter = new SfxPrinter ( pPrinter->GetOptions().Clone(), sPrinterName );
+ assert (! pNewPrinter->isDisposed() );
if( pNewPrinter->IsKnown() )
{
// set printer only once; in _postSetValues
@@ -426,7 +427,7 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf
};
SfxItemSet *pItemSet = new SfxItemSet( mpDoc->GetAttrPool(), nRange );
VclPtr<SfxPrinter> pPrinter = SfxPrinter::Create ( aStream, pItemSet );
-
+ assert (! pPrinter->isDisposed() );
// set printer only once; in _postSetValues
mpPrinter.disposeAndClear();
mpPrinter = pPrinter;
diff --git a/vcl/README.lifecycle b/vcl/README.lifecycle
index 1ee7eab7ea6b..0edd0c8b19eb 100644
--- a/vcl/README.lifecycle
+++ b/vcl/README.lifecycle
@@ -144,11 +144,13 @@ or:
their constructors.
* Pass 'const VclPtr<> &' instead of pointers everywhere
+ + add 'explicit' keywords to VclPtr constructors to
+ accelerate compilation etc.
* Cleanup common existing methods such that they continue to
work post-dispose.
- * Dispose functions shoudl be audited to:
+ * Dispose functions should be audited to:
+ not leave dangling pointsr
+ shrink them - some work should incrementally
migrate back to destructors.
diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index 1bf2df824ff6..27810d43ade9 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -91,7 +91,12 @@ vcl::FontInfo OutputDevice::GetDevFont( int nDevFontIndex ) const
int OutputDevice::GetDevFontCount() const
{
if( !mpGetDevFontList )
+ {
+ if (!mpFontCollection)
+ return 0;
+
mpGetDevFontList = mpFontCollection->GetDevFontList();
+ }
return mpGetDevFontList->Count();
}