Skip to content

Commit

Permalink
Rework thread interruption in QgsHanaColumnTypeThread
Browse files Browse the repository at this point in the history
  • Loading branch information
Maksim Rylov authored and mrylov committed Dec 7, 2020
1 parent e97969c commit 452844b
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 26 deletions.
23 changes: 5 additions & 18 deletions src/providers/hana/qgshanacolumntypethread.cpp
Expand Up @@ -17,38 +17,25 @@
#include "qgshanacolumntypethread.h"
#include "qgshanaconnection.h"
#include "qgshanautils.h"
#include "qgslogger.h"
#include "qgsmessagelog.h"
#include <mutex>
#include "qgslogger.h"

QgsHanaColumnTypeThread::QgsHanaColumnTypeThread( const QString &connName, const QgsDataSourceUri &uri, bool allowGeometrylessTables, bool userTablesOnly )
: mConnectionName( connName )
, mUri( uri )
, mAllowGeometrylessTables( allowGeometrylessTables )
, mUserTablesOnly( userTablesOnly )
, mStopped( false )
{
static std::once_flag initialized;
std::call_once( initialized, [ = ]( )
{
qRegisterMetaType<QgsHanaLayerProperty>( "QgsHanaLayerProperty" );
} );
}

void QgsHanaColumnTypeThread::stop()
{
mStopped = true;
static int initialized = qRegisterMetaType<QgsHanaLayerProperty>( "QgsHanaLayerProperty" );
Q_UNUSED( initialized )
}

void QgsHanaColumnTypeThread::run()
{
mStopped = false;

QgsHanaConnectionRef conn( mUri );
if ( conn.isNull() )
{
QgsDebugMsg( "Connection failed - " + conn->connInfo() );
mStopped = true;
return;
}

Expand All @@ -71,7 +58,7 @@ void QgsHanaColumnTypeThread::run()

for ( int i = 0; i < totalLayers; ++i )
{
if ( mStopped )
if ( isInterruptionRequested() )
break;

QgsHanaLayerProperty &layerProperty = layerProperties[i];
Expand All @@ -84,7 +71,7 @@ void QgsHanaColumnTypeThread::run()
}

emit progress( 0, 0 );
if ( mStopped )
if ( isInterruptionRequested() )
emit progressMessage( tr( "Table retrieval stopped." ) );
else
emit progressMessage( tr( "Table retrieval finished." ) );
Expand Down
6 changes: 0 additions & 6 deletions src/providers/hana/qgshanacolumntypethread.h
Expand Up @@ -39,17 +39,11 @@ class QgsHanaColumnTypeThread : public QThread
void progress( int, int );
void progressMessage( const QString & );

public slots:
void stop();

private:
QgsHanaColumnTypeThread() = default;

const QString mConnectionName;
const QgsDataSourceUri mUri;
const bool mAllowGeometrylessTables;
const bool mUserTablesOnly;
bool mStopped = false;
};

#endif // QGSHANACOLUMNTYPETHREAD_H
6 changes: 4 additions & 2 deletions src/providers/hana/qgshanasourceselect.cpp
Expand Up @@ -467,7 +467,8 @@ QgsHanaSourceSelect::~QgsHanaSourceSelect()
{
if ( mColumnTypeThread )
{
mColumnTypeThread->stop();
mColumnTypeThread->requestInterruption();
mColumnTypeThread->wait();
finishList();
}

Expand Down Expand Up @@ -532,7 +533,8 @@ void QgsHanaSourceSelect::btnConnect_clicked()

if ( mColumnTypeThread )
{
mColumnTypeThread->stop();
mColumnTypeThread->requestInterruption();
mColumnTypeThread->wait();
return;
}

Expand Down

0 comments on commit 452844b

Please sign in to comment.