basic/inc/sbxbase.hxx | 10 +++------- basic/qa/cppunit/basictest.hxx | 2 +- basic/source/runtime/basrdll.cxx | 36 +++++++++++++++++++++++++++++------- basic/source/sbx/sbxbase.cxx | 15 ++++++++------- include/basic/basrdll.hxx | 15 +++++++-------- sfx2/source/appl/app.cxx | 5 +++-- 6 files changed, 51 insertions(+), 32 deletions(-)
New commits: commit 28adfcdcbc504db8d5014a8939aa5e834e5d43d0 Author: Michael Stahl <[email protected]> Date: Thu Oct 23 21:07:49 2014 +0200 fdo#84935: basic: avoid silly SolarMutex asserts on exit on Mac Change-Id: If22b8ff962d2b68130176de3b7b9eccacfc850dc diff --git a/basic/source/sbx/sbxbase.cxx b/basic/source/sbx/sbxbase.cxx index c9ec487..0a88f54 100644 --- a/basic/source/sbx/sbxbase.cxx +++ b/basic/source/sbx/sbxbase.cxx @@ -19,6 +19,7 @@ #include <tools/debug.hxx> #include <tools/stream.hxx> +#include <vcl/svapp.hxx> #include <basic/sbx.hxx> #include <basic/sbxfac.hxx> @@ -41,7 +42,10 @@ SbxAppData::SbxAppData() SbxAppData::~SbxAppData() { + SolarMutexGuard g; + delete pBasicFormater; + aFacs.clear(); } SbxBase::SbxBase() diff --git a/sfx2/source/appl/app.cxx b/sfx2/source/appl/app.cxx index 0eeb327..7c3b888 100644 --- a/sfx2/source/appl/app.cxx +++ b/sfx2/source/appl/app.cxx @@ -232,11 +232,12 @@ SfxApplication::~SfxApplication() // delete global options SvtViewOptions::ReleaseOptions(); + if ( !pAppData_Impl->bDowning ) + Deinitialize(); + #if HAVE_FEATURE_SCRIPTING delete pBasic; #endif - if ( !pAppData_Impl->bDowning ) - Deinitialize(); delete pAppData_Impl; pApp = 0; commit 51906611abb53e8a22f2d460964e87b0b399d684 Author: Michael Stahl <[email protected]> Date: Thu Oct 23 21:05:31 2014 +0200 basic: move SbxAppData to a BasicDLL member ... so it is deleted by ~SfxApplication. Change-Id: I161bd92eb9b5082d1fdeea603921d0372a4d97e6 diff --git a/basic/inc/sbxbase.hxx b/basic/inc/sbxbase.hxx index de1152c..21bb7d4 100644 --- a/basic/inc/sbxbase.hxx +++ b/basic/inc/sbxbase.hxx @@ -24,6 +24,7 @@ #include <basic/sbxdef.hxx> #include <basic/basicdllapi.h> #include <boost/ptr_container/ptr_vector.hpp> +#include <boost/noncopyable.hpp> class SbxFactory; class SbxVariable; @@ -33,6 +34,7 @@ typedef boost::ptr_vector<SbxFactory> SbxFacs; // AppData structure for SBX: struct SbxAppData + : private ::boost::noncopyable { SbxError eSbxError; // Error code SbxFacs aFacs; // Factories @@ -41,13 +43,7 @@ struct SbxAppData LanguageType eBasicFormaterLangType; // It might be useful to store this class 'global' because some string reosurces are saved here - SbxAppData() - : eSbxError(SbxERR_OK) - , aFacs() - , pBasicFormater(NULL) - , eBasicFormaterLangType(LANGUAGE_DONTKNOW) - { - } + SbxAppData(); ~SbxAppData(); }; diff --git a/basic/qa/cppunit/basictest.hxx b/basic/qa/cppunit/basictest.hxx index af0c0e8..6b1d516 100644 --- a/basic/qa/cppunit/basictest.hxx +++ b/basic/qa/cppunit/basictest.hxx @@ -25,9 +25,9 @@ class MacroSnippet { private: bool mbError; + BasicDLL maDll; // we need a dll instance for resouce manager etc. SbModuleRef mpMod; StarBASICRef mpBasic; - BasicDLL maDll; // we need a dll instance for resouce manager etc. void InitSnippet() { diff --git a/basic/source/runtime/basrdll.cxx b/basic/source/runtime/basrdll.cxx index 9086a05..167433c 100644 --- a/basic/source/runtime/basrdll.cxx +++ b/basic/source/runtime/basrdll.cxx @@ -28,6 +28,7 @@ #include <basic/basrdll.hxx> #include <basrid.hxx> #include <sb.hrc> +#include <sbxbase.hxx> struct BasicDLL::Impl { @@ -35,11 +36,13 @@ struct BasicDLL::Impl bool bBreakEnabled; ::boost::scoped_ptr<ResMgr> pBasResMgr; + ::boost::scoped_ptr<SbxAppData> pSbxAppData; Impl() : bDebugMode(false) , bBreakEnabled(true) , pBasResMgr(ResMgr::CreateResMgr("sb", Application::GetSettings().GetUILanguageTag())) + , pSbxAppData(new SbxAppData) { } }; @@ -102,4 +105,9 @@ void BasicDLL::BasicBreak() } } +SbxAppData& GetSbxData_Impl() +{ + return *BASIC_DLL()->m_pImpl->pSbxAppData; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basic/source/sbx/sbxbase.cxx b/basic/source/sbx/sbxbase.cxx index 89cb735..c9ec487 100644 --- a/basic/source/sbx/sbxbase.cxx +++ b/basic/source/sbx/sbxbase.cxx @@ -32,14 +32,11 @@ TYPEINIT0(SbxBase) -namespace +SbxAppData::SbxAppData() + : eSbxError(SbxERR_OK) + , pBasicFormater(0) + , eBasicFormaterLangType(LANGUAGE_DONTKNOW) { - class theSbxAppData : public rtl::Static<SbxAppData, theSbxAppData> {}; -} - -SbxAppData& GetSbxData_Impl() -{ - return theSbxAppData::get(); } SbxAppData::~SbxAppData() commit a7498603d8b532a1560c3ab816ddb941ad472945 Author: Michael Stahl <[email protected]> Date: Thu Oct 23 20:40:49 2014 +0200 basic: pimplify that Change-Id: I0abe66ded0fd69a2720ad64e1a1426aafc7dfffb diff --git a/basic/source/runtime/basrdll.cxx b/basic/source/runtime/basrdll.cxx index 6438b5b..9086a05 100644 --- a/basic/source/runtime/basrdll.cxx +++ b/basic/source/runtime/basrdll.cxx @@ -29,31 +29,44 @@ #include <basrid.hxx> #include <sb.hrc> +struct BasicDLL::Impl +{ + bool bDebugMode; + bool bBreakEnabled; + + ::boost::scoped_ptr<ResMgr> pBasResMgr; + + Impl() + : bDebugMode(false) + , bBreakEnabled(true) + , pBasResMgr(ResMgr::CreateResMgr("sb", Application::GetSettings().GetUILanguageTag())) + { } +}; + BasResId::BasResId( sal_uInt32 nId ) : ResId( nId, *(BASIC_DLL()->GetBasResMgr()) ) { } BasicDLL::BasicDLL() + : m_pImpl(new Impl) { BASIC_DLL() = this; - pBasResMgr = ResMgr::CreateResMgr("sb", Application::GetSettings().GetUILanguageTag() ); - bDebugMode = false; - bBreakEnabled = true; } BasicDLL::~BasicDLL() { - delete pBasResMgr; } +ResMgr* BasicDLL::GetBasResMgr() const { return m_pImpl->pBasResMgr.get(); } + void BasicDLL::EnableBreak( bool bEnable ) { BasicDLL* pThis = BASIC_DLL(); DBG_ASSERT( pThis, "BasicDLL::EnableBreak: No instance yet!" ); if ( pThis ) { - pThis->bBreakEnabled = bEnable; + pThis->m_pImpl->bBreakEnabled = bEnable; } } @@ -63,7 +76,7 @@ void BasicDLL::SetDebugMode( bool bDebugMode ) DBG_ASSERT( pThis, "BasicDLL::EnableBreak: No instance yet!" ); if ( pThis ) { - pThis->bDebugMode = bDebugMode; + pThis->m_pImpl->bDebugMode = bDebugMode; } } @@ -78,7 +91,8 @@ void BasicDLL::BasicBreak() DBG_ASSERT( pThis, "BasicDLL::EnableBreak: No instance yet!" ); if ( pThis ) { - if ( StarBASIC::IsRunning() && !bJustStopping && ( pThis->bBreakEnabled || pThis->bDebugMode ) ) + if (StarBASIC::IsRunning() && !bJustStopping + && (pThis->m_pImpl->bBreakEnabled || pThis->m_pImpl->bDebugMode)) { bJustStopping = true; StarBASIC::Stop(); diff --git a/include/basic/basrdll.hxx b/include/basic/basrdll.hxx index bf6ba73..274126d 100644 --- a/include/basic/basrdll.hxx +++ b/include/basic/basrdll.hxx @@ -20,24 +20,23 @@ #ifndef INCLUDED_BASIC_BASRDLL_HXX #define INCLUDED_BASIC_BASRDLL_HXX -class ResMgr; +#include <boost/scoped_ptr.hpp> -#include <vcl/accel.hxx> #include <basic/basicdllapi.h> +class ResMgr; + class BASIC_DLLPUBLIC BasicDLL { -private: - ResMgr* pBasResMgr; - - bool bDebugMode; - bool bBreakEnabled; +public: + struct Impl; + ::boost::scoped_ptr<Impl> m_pImpl; public: BasicDLL(); ~BasicDLL(); - ResMgr* GetBasResMgr() const { return pBasResMgr; } + ResMgr* GetBasResMgr() const; static void BasicBreak(); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
