From 23ee72212d5df5fd11a36b6b1b45b02ef23dcaf1 Mon Sep 17 00:00:00 2001 From: rpmbuild Date: Fri, 16 Jun 2017 15:53:41 +0100 Subject: [PATCH] Resolves: rhbz#1454693 segv on interrupting tiled rendering --- libreofficekit/source/gtk/lokdocview.cxx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index b6f34ac..584ab57 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -942,6 +942,14 @@ callback (gpointer pData) LOKDocView* pDocView = LOK_DOC_VIEW (pCallback->m_pDocView); LOKDocViewPrivate& priv = getPrivate(pDocView); + //callback registered before the widget was destroyed. + //Use existance of lokThreadPool as flag it was torn down + if (!priv->lokThreadPool) + { + delete pCallback; + return G_SOURCE_REMOVE; + } + switch (pCallback->m_nType) { case LOK_CALLBACK_INVALIDATE_TILES: @@ -2061,11 +2069,18 @@ static void lok_doc_view_destroy (GtkWidget* widget) LOKDocView* pDocView = LOK_DOC_VIEW (widget); LOKDocViewPrivate& priv = getPrivate(pDocView); + if (priv->lokThreadPool) + { + g_thread_pool_free(priv->lokThreadPool, true, true); + priv->lokThreadPool = nullptr; + } + if (priv->m_pDocument) { priv->m_pDocument->pClass->destroy (priv->m_pDocument); priv->m_pDocument = nullptr; } + if (priv->m_pOffice) { priv->m_pOffice->pClass->destroy (priv->m_pOffice); -- 1.8.3.1