summaryrefslogtreecommitdiff
path: root/sfx2/source/appl/appbaslib.cxx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-03-31 19:01:25 +0200
committerMichael Stahl <mstahl@redhat.com>2015-03-31 20:08:57 +0200
commitfae6699c2ec8d68766bb8d5f71483d4b65792327 (patch)
treee04ac98a337173bc74fafc803e46b50bba8742bf /sfx2/source/appl/appbaslib.cxx
parentd360477d8740f29e2c2bc5f7bbd667df7cd26ee9 (diff)
sfx2: fix VBA crash when disposing SfxBaseModel
Crash on WNT in CppunitTest_sw_globalfilter testSkipImages() SfxBaseModel::dispose() calls some event listener that deletes the BasicManager instance; unfortunately SfxObjectShell_Impl has a SfxBasicHolder member that still refers to the deleted BasicManager and then something calls vba::getVBAServiceFactory()... Try to fix that by clearing the SfxBasicHolder member via SfxListener. Change-Id: I65f2ec8e9eb598be218136c06ed8de35a464a971
Diffstat (limited to 'sfx2/source/appl/appbaslib.cxx')
-rw-r--r--sfx2/source/appl/appbaslib.cxx14
1 files changed, 14 insertions, 0 deletions
diff --git a/sfx2/source/appl/appbaslib.cxx b/sfx2/source/appl/appbaslib.cxx
index 980f2db2bdc8..e22091705898 100644
--- a/sfx2/source/appl/appbaslib.cxx
+++ b/sfx2/source/appl/appbaslib.cxx
@@ -43,6 +43,19 @@ SfxBasicManagerHolder::SfxBasicManagerHolder()
{
}
+void SfxBasicManagerHolder::Notify(SfxBroadcaster& rBC, SfxHint const& rHint)
+{
+ if (!mpBasicManager || &rBC != mpBasicManager)
+ return;
+ SfxSimpleHint const*const pSimpleHint(dynamic_cast<SfxSimpleHint const*>(&rHint));
+ if (pSimpleHint && SFX_HINT_DYING == pSimpleHint->GetId())
+ {
+ mpBasicManager = nullptr;
+ mxBasicContainer.clear();
+ mxDialogContainer.clear();
+ }
+}
+
void SfxBasicManagerHolder::reset( BasicManager* _pBasicManager )
{
impl_releaseContainers();
@@ -59,6 +72,7 @@ void SfxBasicManagerHolder::reset( BasicManager* _pBasicManager )
if ( mpBasicManager )
{
+ StartListening(*mpBasicManager);
try
{
mxBasicContainer.set( mpBasicManager->GetScriptLibraryContainer(), UNO_QUERY_THROW );