diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2015-03-23 09:14:13 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2015-04-10 13:06:20 +0100 |
commit | 0e491a7a2affbb08071e6378dacc1995cb301655 (patch) | |
tree | c93205745e1fcd69ff508a3d04aa064bb90606ae | |
parent | protect more printer code-paths. (diff) | |
download | core-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.hxx | 1 | ||||
-rw-r--r-- | sw/source/core/doc/DocumentDeviceManager.cxx | 7 | ||||
-rw-r--r-- | sw/source/uibase/uno/SwXDocumentSettings.cxx | 3 | ||||
-rw-r--r-- | vcl/README.lifecycle | 4 | ||||
-rw-r--r-- | vcl/source/outdev/font.cxx | 5 |
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(); } |