From 3fa3694f90b394f2579668f998db1b395c8cb9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= Date: Wed, 16 Jul 2014 11:14:55 +0200 Subject: [PATCH] Fix crash when trying to delete an extended partition --- src/modules/partition/PartitionCoreModule.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/modules/partition/PartitionCoreModule.cpp b/src/modules/partition/PartitionCoreModule.cpp index bedc66f3d..ce6ed83d0 100644 --- a/src/modules/partition/PartitionCoreModule.cpp +++ b/src/modules/partition/PartitionCoreModule.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -176,6 +177,19 @@ PartitionCoreModule::deletePartition( Device* device, Partition* partition ) if ( partition->state() == Partition::StateNew ) { + if ( partition->roles().has( PartitionRole::Extended ) ) + { + // Delete all logical partitions first + // I am not sure if we can iterate on Partition::children() while + // deleting them, so let's play it safe and keep our own list. + QList< Partition* > lst; + for ( auto partition : partition->children() ) + if ( !PMUtils::isPartitionFreeSpace( partition ) ) + lst << partition; + + for ( auto partition : lst ) + deletePartition( device, partition ); + } // Find matching CreatePartitionJob auto it = std::find_if( jobs.begin(), jobs.end(), [ partition ]( Calamares::job_ptr job ) {