Skip to content

Commit

Permalink
Protect oracle conn method with mutex
Browse files Browse the repository at this point in the history
  • Loading branch information
troopa81 authored and nyalldawson committed Jan 8, 2020
1 parent 7d4d64a commit d6b4b4a
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/providers/oracle/qgsoracleconn.cpp
Expand Up @@ -64,6 +64,7 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceUri uri, bool transaction )
: mRef( 1 )
, mCurrentUser( QString() )
, mHasSpatial( -1 )
, mLock( QMutex::Recursive )
, mTransaction( transaction )
{
QgsDebugMsg( QStringLiteral( "New Oracle connection for " ) + uri.connectionInfo( false ) );
Expand Down Expand Up @@ -436,6 +437,7 @@ bool QgsOracleConn::exec( const QString &query, bool logError, QString *errorMes

bool QgsOracleConn::begin( QSqlDatabase &db )
{
QMutexLocker locker( &mLock );
if ( mTransaction )
{
return exec( QStringLiteral( "SAVEPOINT sp%1" ).arg( ++mSavePointId ) );
Expand All @@ -448,6 +450,7 @@ bool QgsOracleConn::begin( QSqlDatabase &db )

bool QgsOracleConn::commit( QSqlDatabase &db )
{
QMutexLocker locker( &mLock );
if ( mTransaction )
{
return exec( QStringLiteral( "SAVEPOINT sp%1" ).arg( ++mSavePointId ) );
Expand All @@ -460,6 +463,7 @@ bool QgsOracleConn::commit( QSqlDatabase &db )

bool QgsOracleConn::rollback( QSqlDatabase &db )
{
QMutexLocker locker( &mLock );
if ( mTransaction )
{
return exec( QStringLiteral( "ROLLBACK TO SAVEPOINT sp%1" ).arg( mSavePointId ) );
Expand Down Expand Up @@ -507,6 +511,7 @@ QString QgsOracleConn::fieldExpression( const QgsField &fld )

void QgsOracleConn::retrieveLayerTypes( QgsOracleLayerProperty &layerProperty, bool useEstimatedMetadata, bool onlyExistingTypes )
{
QMutexLocker locker( &mLock );
QgsDebugMsgLevel( QStringLiteral( "entering: " ) + layerProperty.toString(), 3 );

if ( layerProperty.isView )
Expand Down Expand Up @@ -944,6 +949,7 @@ QString QgsOracleConn::databaseName( const QString &database, const QString &hos

bool QgsOracleConn::hasSpatial()
{
QMutexLocker locker( &mLock );
if ( mHasSpatial == -1 )
{
QSqlQuery qry( mDatabase );
Expand All @@ -955,6 +961,7 @@ bool QgsOracleConn::hasSpatial()

QString QgsOracleConn::currentUser()
{
QMutexLocker locker( &mLock );
if ( mCurrentUser.isNull() )
{
QSqlQuery qry( mDatabase );
Expand Down

0 comments on commit d6b4b4a

Please sign in to comment.