diff options
-rw-r--r-- | dbaccess/source/core/dataaccess/databasecontext.cxx | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/dbaccess/source/core/dataaccess/databasecontext.cxx b/dbaccess/source/core/dataaccess/databasecontext.cxx index e023806270b2..4d2305a6b9cf 100644 --- a/dbaccess/source/core/dataaccess/databasecontext.cxx +++ b/dbaccess/source/core/dataaccess/databasecontext.cxx @@ -423,9 +423,6 @@ void ODatabaseContext::setTransientProperties(const OUString& _sURL, ODatabaseMo void ODatabaseContext::registerObject(const OUString& _rName, const Reference< XInterface > & _rxObject) { - MutexGuard aGuard(m_aMutex); - ::connectivity::checkDisposed(DatabaseAccessContext_Base::rBHelper.bDisposed); - if ( _rName.isEmpty() ) throw IllegalArgumentException( OUString(), *this, 1 ); @@ -438,9 +435,14 @@ void ODatabaseContext::registerObject(const OUString& _rName, const Reference< X if ( sURL.isEmpty() ) throw IllegalArgumentException( DBA_RES( RID_STR_DATASOURCE_NOT_STORED ), *this, 2 ); - registerDatabaseLocation( _rName, sURL ); + { // avoid deadlocks: lock m_aMutex after checking arguments + MutexGuard aGuard(m_aMutex); + ::connectivity::checkDisposed(DatabaseAccessContext_Base::rBHelper.bDisposed); - ODatabaseSource::setName( xDocDataSource, _rName, ODatabaseSource::DBContextAccess() ); + registerDatabaseLocation( _rName, sURL ); + + ODatabaseSource::setName( xDocDataSource, _rName, ODatabaseSource::DBContextAccess() ); + } // notify our container listeners ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rName), makeAny(_rxObject), Any()); |