From dbef198bacc2ade0f7aea161e3ab464e44ab5615 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 23 Dec 2015 19:14:33 +0100 Subject: [PATCH] Add asynchronous device revert. --- .../partition/core/PartitionCoreModule.cpp | 15 +++++++++++++++ src/modules/partition/core/PartitionCoreModule.h | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index e621cc6bb..85c75acdd 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -49,6 +49,8 @@ #include #include #include +#include +#include static bool hasRootPartition( Device* device ) @@ -505,6 +507,7 @@ PartitionCoreModule::revert() void PartitionCoreModule::revertDevice( Device* dev ) { + QMutexLocker locker( &m_revertMutex ); DeviceInfo* devInfo = infoForDevice( dev ); if ( !devInfo ) return; @@ -526,6 +529,18 @@ PartitionCoreModule::revertDevice( Device* dev ) } +void +PartitionCoreModule::asyncRevertDevice( Device* dev, std::function< void() > callback ) +{ + QFutureWatcher< void > watcher; + connect( &watcher, &QFutureWatcher< void >::finished, + callback ); + + QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev ); + watcher.setFuture( future ); +} + + void PartitionCoreModule::clearJobs() { diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index b098b3d94..c18d472e7 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -28,8 +28,11 @@ // Qt #include +#include #include +#include + class BootLoaderModel; class CreatePartitionJob; class Device; @@ -96,6 +99,7 @@ public: void revert(); void revertDevice( Device* dev ); + void asyncRevertDevice( Device* dev, std::function< void() > callback ); void clearJobs(); @@ -159,6 +163,8 @@ private: Partition* findPartitionByMountPoint( const QString& mountPoint ) const; OsproberEntryList m_osproberLines; + + QMutex m_revertMutex; }; #endif /* PARTITIONCOREMODULE_H */