From 9334aa604f73bf659088c6a1cacba854cfdee5e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Fri, 3 Jun 2016 08:48:20 +0100 Subject: [PATCH] Resolves: tdf#55566 opening two docs with open document macro events can crash OfficeDocumentsManager::buildDocumentsList was set up to ignore disposed documents, but didn't ignore documents which were still uninitialized (i.e. waiting for the macro warning dialog of the other in-construction document to return a decision) Change-Id: I936e29ab6fad14a33609e8d57d11d7d0178075e4 --- ucb/source/ucp/tdoc/tdoc_docmgr.cxx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ucb/source/ucp/tdoc/tdoc_docmgr.cxx b/ucb/source/ucp/tdoc/tdoc_docmgr.cxx index b81de10cc4f0..1af03327bafd 100644 --- a/ucb/source/ucp/tdoc/tdoc_docmgr.cxx +++ b/ucb/source/ucp/tdoc/tdoc_docmgr.cxx @@ -40,6 +40,7 @@ #include "com/sun/star/frame/XStorable.hpp" #include "com/sun/star/frame/ModuleManager.hpp" #include "com/sun/star/lang/DisposedException.hpp" +#include "com/sun/star/lang/NotInitializedException.hpp" #include "com/sun/star/util/XCloseBroadcaster.hpp" #include "tdoc_docmgr.hxx" @@ -411,10 +412,8 @@ void SAL_CALL OfficeDocumentsManager::documentEventOccured( } } - // lang::XDocumentEventListener (base of document::XDocumentEventListener) - // virtual void SAL_CALL OfficeDocumentsManager::disposing( const lang::EventObject& /*Source*/ ) @@ -422,10 +421,8 @@ void SAL_CALL OfficeDocumentsManager::disposing( { } - // Non-interface. - void OfficeDocumentsManager::buildDocumentsList() { uno::Reference< container::XEnumeration > xEnum @@ -491,12 +488,16 @@ void OfficeDocumentsManager::buildDocumentsList() catch ( lang::DisposedException const & ) { // Note: Due to race conditions the XEnumeration can - // contains docs that already have been closed + // contain docs that have already been closed + } + catch ( lang::NotInitializedException const & ) + { + // Note: Due to race conditions the XEnumeration can + // contain docs that are still uninitialized } } } - uno::Reference< embed::XStorage > OfficeDocumentsManager::queryStorage( const OUString & rDocId ) {