include/vcl/commandinfoprovider.hxx       |    2 ++
 vcl/inc/svdata.hxx                        |    7 ++++++-
 vcl/source/app/svmain.cxx                 |    7 +++++++
 vcl/source/helper/commandinfoprovider.cxx |   17 +++++++++++++++--
 4 files changed, 30 insertions(+), 3 deletions(-)

New commits:
commit fa7708def7601bd07cb7642dc444993d7f8f8587
Author: Caolán McNamara <caol...@redhat.com>
Date:   Thu Nov 26 11:32:40 2015 +0000

    mutex used in post-main dtor
    
    Change-Id: Ia4f4def1fd58d82a7c994114e45a36227269671c

diff --git a/include/vcl/commandinfoprovider.hxx 
b/include/vcl/commandinfoprovider.hxx
index c790fed..4fc88b7 100644
--- a/include/vcl/commandinfoprovider.hxx
+++ b/include/vcl/commandinfoprovider.hxx
@@ -100,6 +100,8 @@ public:
     */
     void SetFrame (const css::uno::Reference<css::frame::XFrame>& rxFrame);
 
+    void dispose();
+
   private:
     css::uno::Reference<css::uno::XComponentContext> mxContext;
     css::uno::Reference<css::frame::XFrame> mxCachedDataFrame;
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index da1904c..46527f0 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -75,7 +75,11 @@ class Image;
 class PopupMenu;
 class Application;
 class OutputDevice;
-namespace vcl { class Window; }
+namespace vcl
+{
+    class CommandInfoProvider;
+    class Window;
+}
 class SystemWindow;
 class WorkWindow;
 class Dialog;
@@ -338,6 +342,7 @@ struct ImplSVData
     VclPtr<vcl::Window>     mpIntroWindow;                  // the splash 
screen
     DockingManager*         mpDockingManager;
     BlendFrameCache*        mpBlendFrameCache;
+    vcl::CommandInfoProvider* mpCommandInfoProvider;
 
     oslThreadIdentifier     mnMainThreadId;
     rtl::Reference< vcl::DisplayConnection > mxDisplayConnection;
diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx
index 9cb3d2d..ce44f60 100644
--- a/vcl/source/app/svmain.cxx
+++ b/vcl/source/app/svmain.cxx
@@ -38,6 +38,7 @@
 #include "vcl/implimagetree.hxx"
 #include "vcl/settings.hxx"
 #include "vcl/unowrap.hxx"
+#include "vcl/commandinfoprovider.hxx"
 #include "vcl/configsettings.hxx"
 #include "vcl/lazydelete.hxx"
 #include "vcl/embeddedfontshelper.hxx"
@@ -517,6 +518,12 @@ void DeInitVCL()
     if (pSVData->mpBlendFrameCache)
         delete pSVData->mpBlendFrameCache, pSVData->mpBlendFrameCache = 
nullptr;
 
+    if (pSVData->mpCommandInfoProvider)
+    {
+        pSVData->mpCommandInfoProvider->dispose();
+        pSVData->mpCommandInfoProvider = nullptr;
+    }
+
     ImplDeletePrnQueueList();
     delete pSVData->maGDIData.mpScreenFontList;
     pSVData->maGDIData.mpScreenFontList = nullptr;
diff --git a/vcl/source/helper/commandinfoprovider.cxx 
b/vcl/source/helper/commandinfoprovider.cxx
index 5ef6f09..fcc8aec 100644
--- a/vcl/source/helper/commandinfoprovider.cxx
+++ b/vcl/source/helper/commandinfoprovider.cxx
@@ -31,6 +31,8 @@
 #include <com/sun/star/ui/XImageManager.hpp>
 #include <com/sun/star/awt/KeyModifier.hpp>
 
+#include "svdata.hxx"
+
 using namespace css;
 using namespace css::uno;
 
@@ -100,15 +102,26 @@ CommandInfoProvider::CommandInfoProvider()
       msCachedModuleIdentifier(),
       mxFrameListener()
 {
+    ImplGetSVData()->mpCommandInfoProvider = this;
 }
 
-CommandInfoProvider::~CommandInfoProvider()
+void CommandInfoProvider::dispose()
 {
     if (mxFrameListener.is())
     {
         mxFrameListener->dispose();
-        mxFrameListener = nullptr;
+        mxFrameListener.clear();
     }
+    mxCachedGlobalAcceleratorConfiguration.clear();
+    mxCachedModuleAcceleratorConfiguration.clear();
+    mxCachedDocumentAcceleratorConfiguration.clear();
+    mxCachedDataFrame.clear();
+    mxContext.clear();
+}
+
+CommandInfoProvider::~CommandInfoProvider()
+{
+    dispose();
 }
 
 OUString CommandInfoProvider::GetLabelForCommand (
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to