summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dbaccess/source/core/dataaccess/databasecontext.cxx12
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());