basic/source/basmgr/basicmanagerrepository.cxx | 6 +++++- unotools/source/misc/eventlisteneradapter.cxx | 3 +-- vcl/headless/svpgdi.cxx | 1 + vcl/inc/textrender.hxx | 2 ++ vcl/inc/unx/cairotextrender.hxx | 4 +--- vcl/qt5/Qt5Graphics.cxx | 11 +---------- vcl/quartz/salgdi.cxx | 7 +------ vcl/source/gdi/salgdilayout.cxx | 1 + vcl/unx/generic/gdi/cairotextrender.cxx | 12 ++++++------ 9 files changed, 19 insertions(+), 28 deletions(-)
New commits: commit fb65014f61957bb0e7cf9008b38322ef14e707d6 Author: Jan-Marek Glogowski <jan-marek.glogow...@extern.cib.de> AuthorDate: Wed Nov 20 12:18:39 2019 +0000 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Nov 21 15:21:43 2019 +0100 tdf#128434 free the BasicManager event listener This gets rid of the last 72 lost bytes I could identify in the huge valgrind logs to look like its PDF generation related. Change-Id: Idda3c2c5b7f5ce0211199b86503037b74438ccf2 Reviewed-on: https://gerrit.libreoffice.org/83302 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de> (cherry picked from commit 48b23bbfa0271ed327f668933b92d2ae9b99e806) Reviewed-on: https://gerrit.libreoffice.org/83350 (cherry picked from commit d8cde1cf69bb170da74018e629e1b65830924e0b) Reviewed-on: https://gerrit.libreoffice.org/83370 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/basic/source/basmgr/basicmanagerrepository.cxx b/basic/source/basmgr/basicmanagerrepository.cxx index b725f0563a3c..9ef667aa6c11 100644 --- a/basic/source/basmgr/basicmanagerrepository.cxx +++ b/basic/source/basmgr/basicmanagerrepository.cxx @@ -538,12 +538,16 @@ namespace basic OSL_PRECOND( _pos != m_aStore.end(), "ImplRepository::impl_removeFromRepository: invalid position!" ); std::unique_ptr<BasicManager> pManager = std::move(_pos->second); + Reference<XModel> xModel(_pos->first, UNO_QUERY); // *first* remove from map (else Notify won't work properly) m_aStore.erase( _pos ); - // *then* delete the BasicManager EndListening( *pManager ); + + assert(xModel.is()); + if (xModel.is()) + stopComponentListening(xModel); } diff --git a/unotools/source/misc/eventlisteneradapter.cxx b/unotools/source/misc/eventlisteneradapter.cxx index ac3dbe9c615e..c9f6b6f73ee9 100644 --- a/unotools/source/misc/eventlisteneradapter.cxx +++ b/unotools/source/misc/eventlisteneradapter.cxx @@ -84,7 +84,6 @@ namespace utl { Reference< XEventListener > xDeleteUponLeaving = m_xKeepMeAlive; m_xKeepMeAlive.clear(); - m_xComponent.clear(); m_pAdapter->_disposing(_rSource); } @@ -118,7 +117,7 @@ namespace utl do { rtl::Reference<OEventListenerImpl>& pListenerImpl = *it; - if ( pListenerImpl->getComponent().get() == _rxComp.get() ) + if ((pListenerImpl->getComponent().get() == _rxComp.get()) || (pListenerImpl->getComponent() == _rxComp)) { pListenerImpl->dispose(); it = m_pImpl->aListeners.erase( it ); commit 41f2ec60825bc71686f506178733a885373d6ddb Author: Jan-Marek Glogowski <jan-marek.glogow...@extern.cib.de> AuthorDate: Mon Nov 18 16:04:24 2019 +0000 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Nov 21 15:21:22 2019 +0100 tdf#128434 correctly release fonts in destructors This adds ReleaseFonts() calls to all destructors of SalGraphics and TextRenderImpl derivated classes, which implement SetFont. During destruction a base class can't call into derivated classes, as these are already destructed, so we have to spread these calls manually. Change-Id: Ia57db04f7df665e5205212ce512119e2f60e3379 Reviewed-on: https://gerrit.libreoffice.org/82967 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de> (cherry picked from commit f8e1f8652255cadd80a991aa3e059ee631b333b8) Reviewed-on: https://gerrit.libreoffice.org/83149 (cherry picked from commit a00bdc999344db34d5926dc77ed5ca895295b0ee) Reviewed-on: https://gerrit.libreoffice.org/83197 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index 467de73597e6..8a445b2f209a 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -607,6 +607,7 @@ SvpSalGraphics::SvpSalGraphics() SvpSalGraphics::~SvpSalGraphics() { + ReleaseFonts(); } void SvpSalGraphics::setSurface(cairo_surface_t* pSurface, const basegfx::B2IVector& rSize) diff --git a/vcl/inc/textrender.hxx b/vcl/inc/textrender.hxx index 063b5d4462b2..99360a5521b2 100644 --- a/vcl/inc/textrender.hxx +++ b/vcl/inc/textrender.hxx @@ -32,10 +32,12 @@ class PhysicalFontFace; class TextRenderImpl { public: + // can't call ReleaseFonts here, as the destructor just calls this classes SetFont (pure virtual)! virtual ~TextRenderImpl() {} virtual void SetTextColor( Color nColor ) = 0; virtual void SetFont(LogicalFontInstance*, int nFallbackLevel) = 0; + void ReleaseFonts() { SetFont(nullptr, 0); } virtual void GetFontMetric( ImplFontMetricDataRef&, int nFallbackLevel ) = 0; virtual const FontCharMapRef GetFontCharMap() const = 0; virtual bool GetFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const = 0; diff --git a/vcl/inc/unx/cairotextrender.hxx b/vcl/inc/unx/cairotextrender.hxx index ca9cfcd8da80..6b011a01874e 100644 --- a/vcl/inc/unx/cairotextrender.hxx +++ b/vcl/inc/unx/cairotextrender.hxx @@ -42,13 +42,11 @@ protected: virtual void getSurfaceOffset(double& nDX, double& nDY) = 0; virtual void releaseCairoContext(cairo_t* cr) = 0; - void setFont(LogicalFontInstance *pEntry, int nFallbackLevel); - virtual void clipRegion(cairo_t* cr) = 0; public: CairoTextRender(); - + virtual ~CairoTextRender() override; virtual void SetTextColor( Color nColor ) override; virtual void SetFont(LogicalFontInstance*, int nFallbackLevel) override; diff --git a/vcl/qt5/Qt5Graphics.cxx b/vcl/qt5/Qt5Graphics.cxx index 5192f0b42416..8228699a2602 100644 --- a/vcl/qt5/Qt5Graphics.cxx +++ b/vcl/qt5/Qt5Graphics.cxx @@ -44,16 +44,7 @@ Qt5Graphics::Qt5Graphics( Qt5Frame *pFrame, QImage *pQImage ) m_pWidgetDraw.reset(new Qt5Graphics_Controls()); } -Qt5Graphics::~Qt5Graphics() -{ - // release the text styles - for (int i = 0; i < MAX_FALLBACK; ++i) - { - if (!m_pTextStyle[i]) - break; - m_pTextStyle[i].clear(); - } -} +Qt5Graphics::~Qt5Graphics() { ReleaseFonts(); } void Qt5Graphics::ChangeQImage(QImage* pQImage) { diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx index 846b7abbbc49..8d7308fd70cc 100644 --- a/vcl/quartz/salgdi.cxx +++ b/vcl/quartz/salgdi.cxx @@ -223,12 +223,7 @@ AquaSalGraphics::~AquaSalGraphics() CGPathRelease( mxClipPath ); } - for (int i = 0; i < MAX_FALLBACK; ++i) - { - if (!mpTextStyle[i]) - break; - mpTextStyle[i].clear(); - } + ReleaseFonts(); if( mpXorEmulation ) delete mpXorEmulation; diff --git a/vcl/source/gdi/salgdilayout.cxx b/vcl/source/gdi/salgdilayout.cxx index 789e323f33de..97ba1aa656f0 100644 --- a/vcl/source/gdi/salgdilayout.cxx +++ b/vcl/source/gdi/salgdilayout.cxx @@ -83,6 +83,7 @@ bool SalGraphics::initWidgetDrawBackends(bool bForce) SalGraphics::~SalGraphics() { + // can't call ReleaseFonts here, as the destructor just calls this classes SetFont (pure virtual)! } #if HAVE_FEATURE_OPENGL diff --git a/vcl/unx/generic/gdi/cairotextrender.cxx b/vcl/unx/generic/gdi/cairotextrender.cxx index aa006fa7c5d3..087135652c07 100644 --- a/vcl/unx/generic/gdi/cairotextrender.cxx +++ b/vcl/unx/generic/gdi/cairotextrender.cxx @@ -84,7 +84,12 @@ CairoTextRender::CairoTextRender() rp = nullptr; } -void CairoTextRender::setFont(LogicalFontInstance *pEntry, int nFallbackLevel) +CairoTextRender::~CairoTextRender() +{ + ReleaseFonts(); +} + +void CairoTextRender::SetFont(LogicalFontInstance *pEntry, int nFallbackLevel) { // release all no longer needed font resources for( int i = nFallbackLevel; i < MAX_FALLBACK; ++i ) @@ -384,11 +389,6 @@ bool CairoTextRender::GetFontCapabilities(vcl::FontCapabilities &rGetImplFontCap // SalGraphics -void CairoTextRender::SetFont(LogicalFontInstance *pEntry, int nFallbackLevel) -{ - setFont(pEntry, nFallbackLevel); -} - void CairoTextRender::SetTextColor( Color nColor ) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits