summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
authorAndrzej J.R. Hunt <andrzej@ahunt.org>2013-09-10 07:10:20 +0100
committerAndrzej J.R. Hunt <andrzej@ahunt.org>2013-09-10 19:52:00 +0100
commit87bd0c8c8f2b6d66c32781d5dc81e7b9029ff544 (patch)
treedea7d92b27595b2a661362f476e226ab435b85d5 /connectivity
parent242668950059744d1ef6b54d30bf91fc10cd273d (diff)
Reintroduce Statement specific mutexes. (firebird-sdbc)
This replaces the erronous Connection wide mutex. Libfbembed is multithreaded hence we don't need a connection wide mutex. Change-Id: Ifae79cdefecfe6597a535e36bda318563092bf6c
Diffstat (limited to 'connectivity')
-rw-r--r--connectivity/source/drivers/firebird/Connection.hxx1
-rw-r--r--connectivity/source/drivers/firebird/PreparedStatement.cxx39
-rw-r--r--connectivity/source/drivers/firebird/ResultSet.cxx56
-rw-r--r--connectivity/source/drivers/firebird/ResultSet.hxx2
-rw-r--r--connectivity/source/drivers/firebird/Statement.cxx7
-rw-r--r--connectivity/source/drivers/firebird/StatementCommonBase.cxx10
-rw-r--r--connectivity/source/drivers/firebird/StatementCommonBase.hxx2
7 files changed, 62 insertions, 55 deletions
diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx
index 4a5c9e556c11..c20e6f63525c 100644
--- a/connectivity/source/drivers/firebird/Connection.hxx
+++ b/connectivity/source/drivers/firebird/Connection.hxx
@@ -167,7 +167,6 @@ namespace connectivity
::rtl::OUString getConnectionURL() const {return m_sConnectionURL;}
sal_Bool isEmbedded() const {return m_bIsEmbedded;}
::rtl::OUString getUserName() const {return m_sUser;}
- ::osl::Mutex& getMutex() {return m_aMutex;}
isc_db_handle& getDBHandle() {return m_aDBHandle;}
isc_tr_handle& getTransaction()
throw(::com::sun::star::sdbc::SQLException);
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 29d0f000160f..d60fa2804102 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -66,7 +66,7 @@ OPreparedStatement::OPreparedStatement( Connection* _pConnection,
void OPreparedStatement::ensurePrepared()
throw (SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
if (m_aStatementHandle)
@@ -147,7 +147,7 @@ uno::Sequence< Type > SAL_CALL OPreparedStatement::getTypes()
Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData()
throw(SQLException, RuntimeException)
{
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
ensurePrepared();
@@ -159,7 +159,7 @@ Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData()
void SAL_CALL OPreparedStatement::close() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard( m_pConnection->getMutex() );
+ MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
OStatementCommonBase::close();
@@ -189,7 +189,7 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex,
SAL_INFO("connectivity.firebird",
"setString(" << nParameterIndex << " , " << x << ")");
- MutexGuard aGuard( m_pConnection->getMutex() );
+ MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
ensurePrepared();
@@ -234,7 +234,7 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex,
Reference< XConnection > SAL_CALL OPreparedStatement::getConnection()
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard( m_pConnection->getMutex() );
+ MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
return Reference< XConnection >(m_pConnection);
@@ -246,7 +246,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute()
SAL_INFO("connectivity.firebird", "executeQuery(). "
"Got called with sql: " << m_sSqlStatement);
- MutexGuard aGuard( m_pConnection->getMutex() );
+ MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
ensurePrepared();
@@ -281,6 +281,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute()
}
m_xResultSet = new OResultSet(m_pConnection,
+ m_aMutex,
uno::Reference< XInterface >(*this),
m_aStatementHandle,
m_pOutSqlda);
@@ -312,7 +313,7 @@ Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery()
void SAL_CALL OPreparedStatement::setNull(sal_Int32 nIndex, sal_Int32 /*nSqlType*/)
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard( m_pConnection->getMutex() );
+ MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
setParameterNull(nIndex, true);
@@ -323,7 +324,7 @@ void SAL_CALL OPreparedStatement::setBoolean(sal_Int32 nIndex, sal_Bool x)
{
(void) nIndex;
(void) x;
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
// TODO: decide how to deal with bools. Probably just as a byte, although
@@ -334,7 +335,7 @@ template <typename T>
void OPreparedStatement::setValue(sal_Int32 nIndex, T& nValue, ISC_SHORT nType)
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard( m_pConnection->getMutex() );
+ MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
ensurePrepared();
@@ -437,7 +438,7 @@ void SAL_CALL OPreparedStatement::setClob( sal_Int32 parameterIndex, const Refer
{
(void) parameterIndex;
(void) x;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -447,7 +448,7 @@ void SAL_CALL OPreparedStatement::setBlob( sal_Int32 parameterIndex, const Refer
{
(void) parameterIndex;
(void) x;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -457,7 +458,7 @@ void SAL_CALL OPreparedStatement::setArray( sal_Int32 parameterIndex, const Refe
{
(void) parameterIndex;
(void) x;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -467,7 +468,7 @@ void SAL_CALL OPreparedStatement::setRef( sal_Int32 parameterIndex, const Refere
{
(void) parameterIndex;
(void) x;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -480,7 +481,7 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c
(void) sqlType;
(void) scale;
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
}
// -------------------------------------------------------------------------
@@ -490,7 +491,7 @@ void SAL_CALL OPreparedStatement::setObjectNull( sal_Int32 parameterIndex, sal_I
(void) parameterIndex;
(void) sqlType;
(void) typeName;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -500,7 +501,7 @@ void SAL_CALL OPreparedStatement::setObject( sal_Int32 parameterIndex, const Any
{
(void) parameterIndex;
(void) x;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -510,7 +511,7 @@ void SAL_CALL OPreparedStatement::setBytes( sal_Int32 parameterIndex, const Sequ
{
(void) parameterIndex;
(void) x;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -522,7 +523,7 @@ void SAL_CALL OPreparedStatement::setCharacterStream( sal_Int32 parameterIndex,
(void) parameterIndex;
(void) x;
(void) length;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
@@ -533,7 +534,7 @@ void SAL_CALL OPreparedStatement::setBinaryStream( sal_Int32 parameterIndex, con
(void) parameterIndex;
(void) x;
(void) length;
- ::osl::MutexGuard aGuard( m_pConnection->getMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
}
diff --git a/connectivity/source/drivers/firebird/ResultSet.cxx b/connectivity/source/drivers/firebird/ResultSet.cxx
index 50930321823d..cbbd4d58dac9 100644
--- a/connectivity/source/drivers/firebird/ResultSet.cxx
+++ b/connectivity/source/drivers/firebird/ResultSet.cxx
@@ -54,10 +54,11 @@ using namespace ::com::sun::star::io;
using namespace ::com::sun::star::util;
OResultSet::OResultSet(Connection* pConnection,
+ ::osl::Mutex& rMutex,
const uno::Reference< XInterface >& xStatement,
isc_stmt_handle& aStatementHandle,
XSQLDA* pSqlda)
- : OResultSet_BASE(pConnection->getMutex())
+ : OResultSet_BASE(rMutex)
, OPropertyContainer(OResultSet_BASE::rBHelper)
, m_bIsBookmarkable(false)
, m_nFetchSize(1)
@@ -65,6 +66,7 @@ OResultSet::OResultSet(Connection* pConnection,
, m_nFetchDirection(::com::sun::star::sdbc::FetchDirection::FORWARD)
, m_nResultSetConcurrency(::com::sun::star::sdbc::ResultSetConcurrency::READ_ONLY)
, m_pConnection(pConnection)
+ , m_rMutex(rMutex)
, m_xStatement(xStatement)
, m_xMetaData(0)
, m_pSqlda(pSqlda)
@@ -113,7 +115,7 @@ OResultSet::~OResultSet()
// ---- XResultSet -- Row retrieval methods ------------------------------------
sal_Int32 SAL_CALL OResultSet::getRow() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return m_currentRow;
@@ -121,7 +123,7 @@ sal_Int32 SAL_CALL OResultSet::getRow() throw(SQLException, RuntimeException)
sal_Bool SAL_CALL OResultSet::next() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
m_currentRow++;
@@ -164,7 +166,7 @@ sal_Bool SAL_CALL OResultSet::isLast() throw(SQLException, RuntimeException)
sal_Bool SAL_CALL OResultSet::isBeforeFirst() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return m_currentRow == 0;
@@ -172,7 +174,7 @@ sal_Bool SAL_CALL OResultSet::isBeforeFirst() throw(SQLException, RuntimeExcepti
sal_Bool SAL_CALL OResultSet::isAfterLast() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return m_bIsAfterLastRow;
@@ -180,7 +182,7 @@ sal_Bool SAL_CALL OResultSet::isAfterLast() throw(SQLException, RuntimeException
sal_Bool SAL_CALL OResultSet::isFirst() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return m_currentRow == 1 && !m_bIsAfterLastRow;
@@ -188,7 +190,7 @@ sal_Bool SAL_CALL OResultSet::isFirst() throw(SQLException, RuntimeException)
void SAL_CALL OResultSet::beforeFirst() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if (m_currentRow != 0)
@@ -198,7 +200,7 @@ void SAL_CALL OResultSet::beforeFirst() throw(SQLException, RuntimeException)
void SAL_CALL OResultSet::afterLast() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if (!m_bIsAfterLastRow)
@@ -208,7 +210,7 @@ void SAL_CALL OResultSet::afterLast() throw(SQLException, RuntimeException)
sal_Bool SAL_CALL OResultSet::first() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if (m_currentRow == 0)
@@ -238,7 +240,7 @@ sal_Bool SAL_CALL OResultSet::last() throw(SQLException, RuntimeException)
sal_Bool SAL_CALL OResultSet::absolute(sal_Int32 aRow) throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if (aRow > m_currentRow)
@@ -256,7 +258,7 @@ sal_Bool SAL_CALL OResultSet::absolute(sal_Int32 aRow) throw(SQLException, Runti
sal_Bool SAL_CALL OResultSet::relative(sal_Int32 row) throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if (row > 0)
@@ -279,7 +281,7 @@ sal_Bool SAL_CALL OResultSet::relative(sal_Int32 row) throw(SQLException, Runtim
void SAL_CALL OResultSet::checkColumnIndex(sal_Int32 index)
throw (SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if( index < 1 || index > m_fieldCount )
@@ -291,7 +293,7 @@ void SAL_CALL OResultSet::checkColumnIndex(sal_Int32 index)
void SAL_CALL OResultSet::checkRowIndex()
throw (SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if((m_currentRow < 1) || m_bIsAfterLastRow)
@@ -314,7 +316,7 @@ Any SAL_CALL OResultSet::queryInterface( const Type & rType ) throw(RuntimeExcep
sal_Int32 SAL_CALL OResultSet::findColumn(const OUString& rColumnName)
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
uno::Reference< XResultSetMetaData > xMeta = getMetaData();
@@ -343,7 +345,7 @@ sal_Int32 SAL_CALL OResultSet::findColumn(const OUString& rColumnName)
uno::Reference< XInputStream > SAL_CALL OResultSet::getBinaryStream( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
{
(void) columnIndex;
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return NULL;
@@ -352,7 +354,7 @@ uno::Reference< XInputStream > SAL_CALL OResultSet::getBinaryStream( sal_Int32 c
uno::Reference< XInputStream > SAL_CALL OResultSet::getCharacterStream( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
{
(void) columnIndex;
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return NULL;
@@ -425,7 +427,7 @@ template <typename T>
T OResultSet::safelyRetrieveValue(sal_Int32 columnIndex)
throw (SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
checkColumnIndex(columnIndex);
@@ -437,7 +439,7 @@ T OResultSet::safelyRetrieveValue(sal_Int32 columnIndex)
// ---- XRow -----------------------------------------------------------------
sal_Bool SAL_CALL OResultSet::wasNull() throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return m_bWasNull;
@@ -543,7 +545,7 @@ DateTime SAL_CALL OResultSet::getTimestamp(sal_Int32 nIndex)
// -------------------------------------------------------------------------
uno::Reference< XResultSetMetaData > SAL_CALL OResultSet::getMetaData( ) throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if(!m_xMetaData.is())
@@ -554,7 +556,7 @@ uno::Reference< XResultSetMetaData > SAL_CALL OResultSet::getMetaData( ) throw(
uno::Reference< XArray > SAL_CALL OResultSet::getArray( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
{
(void) columnIndex;
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return NULL;
@@ -565,7 +567,7 @@ uno::Reference< XArray > SAL_CALL OResultSet::getArray( sal_Int32 columnIndex )
uno::Reference< XClob > SAL_CALL OResultSet::getClob( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
{
(void) columnIndex;
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return NULL;
@@ -574,7 +576,7 @@ uno::Reference< XClob > SAL_CALL OResultSet::getClob( sal_Int32 columnIndex ) th
uno::Reference< XBlob > SAL_CALL OResultSet::getBlob(sal_Int32 columnIndex)
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
ISC_QUAD* pBlobID = safelyRetrieveValue< ISC_QUAD* >(columnIndex);
@@ -587,7 +589,7 @@ uno::Reference< XBlob > SAL_CALL OResultSet::getBlob(sal_Int32 columnIndex)
uno::Reference< XRef > SAL_CALL OResultSet::getRef( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
{
(void) columnIndex;
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return NULL;
@@ -598,7 +600,7 @@ Any SAL_CALL OResultSet::getObject( sal_Int32 columnIndex, const uno::Reference<
{
(void) columnIndex;
(void) typeMap;
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return Any();
@@ -613,7 +615,7 @@ void SAL_CALL OResultSet::close() throw(SQLException, RuntimeException)
SAL_INFO("connectivity.firebird", "close().");
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
}
dispose();
@@ -623,7 +625,7 @@ void SAL_CALL OResultSet::close() throw(SQLException, RuntimeException)
uno::Reference< XInterface > SAL_CALL OResultSet::getStatement()
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
return m_xStatement;
@@ -658,7 +660,7 @@ void SAL_CALL OResultSet::refreshRow() throw(SQLException, RuntimeException)
void SAL_CALL OResultSet::cancel( ) throw(RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_rMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
}
diff --git a/connectivity/source/drivers/firebird/ResultSet.hxx b/connectivity/source/drivers/firebird/ResultSet.hxx
index 2963b65fde9c..af608757799a 100644
--- a/connectivity/source/drivers/firebird/ResultSet.hxx
+++ b/connectivity/source/drivers/firebird/ResultSet.hxx
@@ -75,6 +75,7 @@ namespace connectivity
protected:
Connection* m_pConnection;
+ ::osl::Mutex& m_rMutex;
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& m_xStatement;
::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData> m_xMetaData;
@@ -114,6 +115,7 @@ namespace connectivity
DECLARE_SERVICE_INFO();
OResultSet(Connection* pConnection,
+ ::osl::Mutex& rMutex,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xStatement,
isc_stmt_handle& aStatementHandle,
XSQLDA* aSqlda);
diff --git a/connectivity/source/drivers/firebird/Statement.cxx b/connectivity/source/drivers/firebird/Statement.cxx
index 00978b708d62..1ed5bd2dded4 100644
--- a/connectivity/source/drivers/firebird/Statement.cxx
+++ b/connectivity/source/drivers/firebird/Statement.cxx
@@ -80,7 +80,7 @@ void SAL_CALL OStatement::release() throw()
void OStatement::disposeResultSet()
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
OStatementCommonBase::disposeResultSet();
@@ -105,7 +105,7 @@ sal_Int32 SAL_CALL OStatement::executeUpdate(const OUString& sql)
uno::Reference< XResultSet > SAL_CALL OStatement::executeQuery(const OUString& sql)
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
SAL_INFO("connectivity.firebird", "executeQuery(" << sql << ")");
@@ -126,6 +126,7 @@ uno::Reference< XResultSet > SAL_CALL OStatement::executeQuery(const OUString& s
SAL_WARN("connectivity.firebird", "isc_dsql_execute failed");
m_xResultSet = new OResultSet(m_pConnection,
+ m_aMutex,
uno::Reference< XInterface >(*this),
m_aStatementHandle,
m_pSqlda);
@@ -151,7 +152,7 @@ sal_Bool SAL_CALL OStatement::execute(const OUString& sql)
uno::Reference< XConnection > SAL_CALL OStatement::getConnection()
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
return (uno::Reference< XConnection >)m_pConnection;
diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.cxx b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
index f2b669ff20a1..dfff5d7e499c 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.cxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
@@ -45,7 +45,7 @@ using namespace ::rtl;
using namespace ::std;
OStatementCommonBase::OStatementCommonBase(Connection* _pConnection)
- : OStatementCommonBase_Base(_pConnection->getMutex()),
+ : OStatementCommonBase_Base(m_aMutex),
OPropertySetHelper(OStatementCommonBase_Base::rBHelper),
m_pConnection(_pConnection),
m_aStatementHandle( 0 ),
@@ -102,7 +102,7 @@ Sequence< Type > SAL_CALL OStatementCommonBase::getTypes( ) throw(RuntimeExcept
void SAL_CALL OStatementCommonBase::cancel( ) throw(RuntimeException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
// cancel the current sql statement
}
@@ -113,7 +113,7 @@ void SAL_CALL OStatementCommonBase::close()
SAL_INFO("connectivity.firebird", "close");
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
disposeResultSet();
freeStatementHandle();
@@ -127,7 +127,7 @@ void OStatementCommonBase::prepareAndDescribeStatement(const OUString& sql,
XSQLDA* pInSqlda)
throw (SQLException)
{
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
freeStatementHandle();
@@ -214,7 +214,7 @@ uno::Reference< XResultSet > SAL_CALL OStatementCommonBase::getResultSet() throw
{
// TODO: verify we really can't support this
// return uno::Reference< XResultSet >();
- MutexGuard aGuard(m_pConnection->getMutex());
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
return m_xResultSet;
diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.hxx b/connectivity/source/drivers/firebird/StatementCommonBase.hxx
index c1af319569c2..cabeb6b71ebc 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.hxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.hxx
@@ -53,6 +53,8 @@ namespace connectivity
{
protected:
+ ::osl::Mutex m_aMutex;
+
::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet> m_xResultSet; // The last ResultSet created
// for this Statement