basic/source/basmgr/basicmanagerrepository.cxx | 18 ++++++++++-------- basic/source/uno/namecont.cxx | 4 ++-- sw/source/uibase/docvw/PostItMgr.cxx | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-)
New commits: commit 6edebc078c527112e15c75f2666653e5f53dc171 Author: Michael Stahl <mst...@redhat.com> Date: Wed Oct 8 15:30:54 2014 +0200 SwPostItMgr::RemoveItem(): AddressSanitizer: heap-use-after-free Calling std::list::remove() iterates over all elements... Change-Id: I46d00217911c1863f70d3ba72dc7099411714471 diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx index 6b1d5c9..5daecba 100644 --- a/sw/source/uibase/docvw/PostItMgr.cxx +++ b/sw/source/uibase/docvw/PostItMgr.cxx @@ -243,7 +243,7 @@ void SwPostItMgr::RemoveItem( SfxBroadcaster* pBroadcast ) SwSidebarItem* p = (*i); if (GetActiveSidebarWin() == p->pPostIt) SetActiveSidebarWin(0); - mvPostItFlds.remove(*i); + mvPostItFlds.erase(i); delete p->pPostIt; delete p; break; commit fca62934f492125ea6728fd6d09f0c66c9e4fa69 Author: Michael Stahl <mst...@redhat.com> Date: Wed Oct 8 15:21:07 2014 +0200 basic: use SolarMutex to lock SfxLibraryContainer Originally this used both SolarMutex and an own mutex, then a deadlock was resolved in 2fe6a4a34b38c05e252c71f4d2f18e4a90e61b29 by not locking SolarMutex. Since the class will call event listeners without dropping the mutex e.g. in insertNoCheck(), using the SolarMutex appears better anyway. With this, installing a BASIC extension no longer triggers SolarMutex asserts in SfxBroadcaster. Change-Id: Ib9a2ee491ef53b1a53855af0fc22e863c5e7cb91 diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx index 55d7327..db22aef 100644 --- a/basic/source/uno/namecont.cxx +++ b/basic/source/uno/namecont.cxx @@ -417,13 +417,13 @@ void SfxLibraryContainer::checkDisposed() const void SfxLibraryContainer::enterMethod() { - maMutex.acquire(); + Application::GetSolarMutex().acquire(); checkDisposed(); } void SfxLibraryContainer::leaveMethod() { - maMutex.release(); + Application::GetSolarMutex().release(); } BasicManager* SfxLibraryContainer::getBasicManager() commit 26b79470cabb191c3291789f99d8737da1a4fbab Author: Michael Stahl <mst...@redhat.com> Date: Wed Oct 8 15:11:34 2014 +0200 basic::ImplRepository: use SolarMutex instead of own mutex The locking strategy in the basic module is totally unclear to me, there does not appear to be a dedicated mutex for the core stuff callable via StarBASIC, just a bunch of SolarMutexGuards at random locations; let's try to use SolarMutex at the UNO entry points... Change-Id: Ia9c45fdcfb5ffd0a4acc77ef5d2fabfb8743ad38 diff --git a/basic/source/basmgr/basicmanagerrepository.cxx b/basic/source/basmgr/basicmanagerrepository.cxx index bcf0855..d7928d8 100644 --- a/basic/source/basmgr/basicmanagerrepository.cxx +++ b/basic/source/basmgr/basicmanagerrepository.cxx @@ -81,7 +81,6 @@ namespace basic ImplRepository(); private: - ::osl::Mutex m_aMutex; BasicManagerStore m_aStore; CreationListeners m_aCreationListeners; @@ -222,7 +221,7 @@ namespace basic BasicManager* ImplRepository::getDocumentBasicManager( const Reference< XModel >& _rxDocumentModel ) { - ::osl::MutexGuard aGuard( m_aMutex ); + SolarMutexGuard g; /* #163556# (DR) - This function may be called recursively while constructing the Basic manager and loading the Basic storage. By @@ -242,7 +241,7 @@ namespace basic BasicManager* ImplRepository::getApplicationBasicManager( bool _bCreate ) { - ::osl::MutexGuard aGuard( m_aMutex ); + SolarMutexGuard g; BasicManager* pAppManager = GetSbData()->pAppBasMgr; if ( ( pAppManager == NULL ) && _bCreate ) @@ -254,7 +253,7 @@ namespace basic void ImplRepository::setApplicationBasicManager( BasicManager* _pBasicManager ) { - ::osl::MutexGuard aGuard( m_aMutex ); + SolarMutexGuard g; BasicManager* pPreviousManager = getApplicationBasicManager( false ); delete pPreviousManager; @@ -265,7 +264,8 @@ namespace basic BasicManager* ImplRepository::impl_createApplicationBasicManager() { - ::osl::MutexGuard aGuard( m_aMutex ); + SolarMutexGuard g; + OSL_PRECOND( getApplicationBasicManager( false ) == NULL, "ImplRepository::impl_createApplicationBasicManager: there already is one!" ); // Determine Directory @@ -324,14 +324,16 @@ namespace basic void ImplRepository::registerCreationListener( BasicManagerCreationListener& _rListener ) { - ::osl::MutexGuard aGuard( m_aMutex ); + SolarMutexGuard g; + m_aCreationListeners.push_back( &_rListener ); } void ImplRepository::revokeCreationListener( BasicManagerCreationListener& _rListener ) { - ::osl::MutexGuard aGuard( m_aMutex ); + SolarMutexGuard g; + CreationListeners::iterator pos = ::std::find( m_aCreationListeners.begin(), m_aCreationListeners.end(), &_rListener ); if ( pos != m_aCreationListeners.end() ) m_aCreationListeners.erase( pos ); @@ -542,7 +544,7 @@ namespace basic void ImplRepository::_disposing( const ::com::sun::star::lang::EventObject& _rSource ) { - ::osl::MutexGuard aGuard( m_aMutex ); + SolarMutexGuard g; Reference< XInterface > xNormalizedSource( _rSource.Source, UNO_QUERY ); #if OSL_DEBUG_LEVEL > 0 _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits