From 9a1541e55336b1833ba8ee403b99d20ea1ecce5f Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 2 Aug 2015 21:29:59 +0200 Subject: Fix a crash that could occur when cancelling an export (fixes #2192) --- Source/SPExportController.m | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'Source') diff --git a/Source/SPExportController.m b/Source/SPExportController.m index c13e4fc6..fa5e0e9b 100644 --- a/Source/SPExportController.m +++ b/Source/SPExportController.m @@ -72,6 +72,9 @@ static const NSString *SPSQLExportDropEnabled = @"SQLExportDropEnabled"; - (void)_resizeWindowForCustomFilenameViewByHeightDelta:(NSInteger)delta; - (void)_resizeWindowForAdvancedOptionsViewByHeightDelta:(NSInteger)delta; +- (void)_waitUntilQueueIsEmpty:(id)sender; +- (void)_queueIsEmpty:(id)sender; + @end @implementation SPExportController @@ -364,8 +367,20 @@ static const NSString *SPSQLExportDropEnabled = @"SQLExportDropEnabled"; [sender setEnabled:NO]; // Cancel all of the currently running operations - [operationQueue cancelAllOperations]; - + [operationQueue cancelAllOperations]; // async call + [NSThread detachNewThreadWithName:SPCtxt(@"SPExportController cancelExport: waiting for empty queue", tableDocumentInstance) target:self selector:@selector(_waitUntilQueueIsEmpty:) object:sender]; +} + +- (void)_waitUntilQueueIsEmpty:(id)sender +{ + [sender retain]; + [operationQueue waitUntilAllOperationsAreFinished]; + [self performSelectorOnMainThread:@selector(_queueIsEmpty:) withObject:sender waitUntilDone:NO]; + [sender release]; +} + +- (void)_queueIsEmpty:(id)sender +{ // Loop the cached export file paths and remove them from disk if they exist for (SPExportFile *file in exportFiles) { -- cgit v1.2.3