diff options
Diffstat (limited to 'scaddins/source/analysis/analysis.cxx')
-rw-r--r-- | scaddins/source/analysis/analysis.cxx | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/scaddins/source/analysis/analysis.cxx b/scaddins/source/analysis/analysis.cxx index b951eca29fc6..8b423b86331f 100644 --- a/scaddins/source/analysis/analysis.cxx +++ b/scaddins/source/analysis/analysis.cxx @@ -43,6 +43,10 @@ using namespace ::com::sun::star; using namespace sca::analysis; using namespace std; +static osl::Mutex g_InstanceMutex; +static rtl::Reference<AnalysisAddIn> g_Instance; +static bool g_Disposed; + OUString AnalysisAddIn::GetFuncDescrStr(const char** pResId, sal_uInt16 nStrIndex) { return AnalysisResId(pResId[nStrIndex - 1]); @@ -59,6 +63,7 @@ void AnalysisAddIn::InitData() } AnalysisAddIn::AnalysisAddIn( const uno::Reference< uno::XComponentContext >& xContext ) : + AnalysisAddIn_Base(m_aMutex), aAnyConv( xContext ) { } @@ -67,6 +72,14 @@ AnalysisAddIn::~AnalysisAddIn() { } +void AnalysisAddIn::dispose() +{ + AnalysisAddIn_Base::dispose(); + osl::MutexGuard aGuard(g_InstanceMutex); + g_Instance.clear(); + g_Disposed = true; +} + sal_Int32 AnalysisAddIn::getDateMode( const uno::Reference< beans::XPropertySet >& xPropSet, const uno::Any& rAny ) @@ -1056,7 +1069,11 @@ extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* scaddins_AnalysisAddIn_get_implementation( css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&) { - static rtl::Reference<AnalysisAddIn> g_Instance(new AnalysisAddIn(context)); + osl::MutexGuard aGuard(g_InstanceMutex); + if (g_Disposed) + return nullptr; + if (!g_Instance) + g_Instance.set(new AnalysisAddIn(context)); g_Instance->acquire(); return static_cast<cppu::OWeakObject*>(g_Instance.get()); } |