chart2/source/view/charttypes/GL3DBarChart.cxx | 14 ++++++++++++-- chart2/source/view/inc/GL3DBarChart.hxx | 2 ++ chart2/source/view/main/GL3DRenderer.cxx | 19 +++++++++++++++++++ include/vcl/opengl/OpenGLContext.hxx | 2 ++ include/vcl/openglwin.hxx | 2 ++ vcl/source/opengl/OpenGLContext.cxx | 7 +++++++ vcl/source/opengl/OpenGLHelper.cxx | 6 +++--- vcl/source/window/openglwin.cxx | 2 ++ 8 files changed, 49 insertions(+), 5 deletions(-)
New commits: commit 032df92ebcb59cc614b703073fdb5f31aa8570fc Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri May 23 02:11:23 2014 +0200 Lsan: fix memory leak Change-Id: I82a517a267cceaac4dd1030d45c67fc070e22def diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx index a9df966..ed2a6c7 100644 --- a/include/vcl/opengl/OpenGLContext.hxx +++ b/include/vcl/opengl/OpenGLContext.hxx @@ -137,6 +137,8 @@ struct GLWindow bMultiSampleSupported(false) { } + + ~GLWindow(); }; class VCLOPENGL_DLLPUBLIC OpenGLContext diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index 4128bf4..e07b341 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -19,6 +19,13 @@ using namespace com::sun::star; +GLWindow::~GLWindow() +{ +#if defined( UNX ) + XFree(vi); +#endif +} + OpenGLContext::OpenGLContext(): mpWindow(NULL), m_pChildWindow(NULL), commit 7410d9f8f0d927825ce8820ff8e3afc66c739fb5 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri May 23 02:01:03 2014 +0200 Lsan: fix memory leak Change-Id: Id8adb7517960a33f9900cb773b62b84db71e795a diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx index 50d5799..bace47b 100644 --- a/vcl/source/opengl/OpenGLHelper.cxx +++ b/vcl/source/opengl/OpenGLHelper.cxx @@ -38,14 +38,14 @@ OString loadShader(const OUString& rFilename) { sal_uInt64 nSize = 0; aFile.getSize(nSize); - char* content = new char[nSize+1]; + boost::scoped_array<char> content(new char[nSize+1]); sal_uInt64 nBytesRead = 0; - aFile.read(content, nSize, nBytesRead); + aFile.read(content.get(), nSize, nBytesRead); if(nSize != nBytesRead) assert(false); content[nSize] = 0; - return OString(content); + return OString(content.get()); } else { commit 640bdf827d45425b07e53bcb1eb223ebd45aea9f Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri May 23 01:58:41 2014 +0200 Lsan: fix memory leaks Change-Id: I010c7c194bf0680a499077b6b364498a09542764 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 7cec6af..e5e08d3 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -873,6 +873,8 @@ void OpenGL3DRenderer::RenderPolygon3DObject() polygon.verticesList.end(), DeletePointer<Vertices3D>()); std::for_each(polygon.normalsList.begin(), polygon.normalsList.end(), DeletePointer<Normals3D>()); + delete polygon.vertices; + delete polygon.normals; m_Polygon3DInfoList.pop_front(); } glDepthMask(GL_TRUE); commit eea7e208486e57ac1ff60281c077570f1179aa47 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri May 23 01:41:49 2014 +0200 Lsan: fix memory leaks Change-Id: I35adb022f12c6833f4f29b2e8dad44394a2c4be5 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 1f8fe41..7cec6af 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -840,6 +840,19 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) glUseProgram(0); } +namespace { + +template< typename T > +struct DeletePointer +{ + void operator()(T* p) + { + delete p; + } +}; + +} + void OpenGL3DRenderer::RenderPolygon3DObject() { glDepthMask(GL_FALSE); @@ -856,6 +869,10 @@ void OpenGL3DRenderer::RenderPolygon3DObject() { RenderPolygon3D(polygon); } + std::for_each(polygon.verticesList.begin(), + polygon.verticesList.end(), DeletePointer<Vertices3D>()); + std::for_each(polygon.normalsList.begin(), + polygon.normalsList.end(), DeletePointer<Normals3D>()); m_Polygon3DInfoList.pop_front(); } glDepthMask(GL_TRUE); commit d8af055bacfad18aebceb1be7163ef8bf5e4ff6d Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Fri May 23 01:19:19 2014 +0200 Lsan: fix invalid memory access The chart object can be destroyed after the context. Change-Id: I5ae370638f296ea314ee11680e0a8d81a8fdbe69 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index a3a8858..5b0c764 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -29,7 +29,8 @@ GL3DBarChart::GL3DBarChart( mxChartType(xChartType), mpRenderer(new opengl3D::OpenGL3DRenderer()), mrWindow(rWindow), - mpCamera(NULL) + mpCamera(NULL), + mbValidContext(true) { Size aSize = mrWindow.GetSizePixel(); mpRenderer->SetSize(aSize); @@ -39,7 +40,8 @@ GL3DBarChart::GL3DBarChart( GL3DBarChart::~GL3DBarChart() { - mrWindow.setRenderer(NULL); + if(mbValidContext) + mrWindow.setRenderer(NULL); } namespace { @@ -186,6 +188,9 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer void GL3DBarChart::render() { + if(!mbValidContext) + return; + mrWindow.getContext()->makeCurrent(); Size aSize = mrWindow.GetSizePixel(); mpRenderer->SetSize(aSize); @@ -238,6 +243,11 @@ void GL3DBarChart::clickedAt(const Point& rPos) mpCamera->zoom(nId); } +void GL3DBarChart::contextDestroyed() +{ + mbValidContext = false; +} + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index cc252cf..674daf6 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -47,6 +47,7 @@ public: virtual void update() SAL_OVERRIDE; virtual void clickedAt(const Point& rPos) SAL_OVERRIDE; + virtual void contextDestroyed() SAL_OVERRIDE; private: css::uno::Reference<css::chart2::XChartType> mxChartType; @@ -56,6 +57,7 @@ private: OpenGLWindow& mrWindow; opengl3D::Camera* mpCamera; + bool mbValidContext; }; } diff --git a/include/vcl/openglwin.hxx b/include/vcl/openglwin.hxx index e9b823e..8e34d05 100644 --- a/include/vcl/openglwin.hxx +++ b/include/vcl/openglwin.hxx @@ -24,6 +24,8 @@ public: virtual ~IRenderer() {} virtual void update() = 0; virtual void clickedAt(const Point& rPos) = 0; + + virtual void contextDestroyed() = 0; }; // pImpl Pattern to avoid linking against OpenGL libs when using the class without the context diff --git a/vcl/source/window/openglwin.cxx b/vcl/source/window/openglwin.cxx index d6fb9c4..d6e5357 100644 --- a/vcl/source/window/openglwin.cxx +++ b/vcl/source/window/openglwin.cxx @@ -40,6 +40,8 @@ OpenGLWindow::OpenGLWindow(Window* pParent): OpenGLWindow::~OpenGLWindow() { + if(mpRenderer) + mpRenderer->contextDestroyed(); } OpenGLContext* OpenGLWindow::getContext() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits