aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPExportController.m
diff options
context:
space:
mode:
authorMax <post@wickenrode.com>2015-08-02 21:29:59 +0200
committerMax <post@wickenrode.com>2015-09-12 22:36:54 +0200
commit9a1541e55336b1833ba8ee403b99d20ea1ecce5f (patch)
tree52cd51bffcee941d163b50c0e03027b3fa7e213b /Source/SPExportController.m
parent940b515a1abf58a81f7de8697bdec54d43064664 (diff)
downloadsequelpro-9a1541e55336b1833ba8ee403b99d20ea1ecce5f.tar.gz
sequelpro-9a1541e55336b1833ba8ee403b99d20ea1ecce5f.tar.bz2
sequelpro-9a1541e55336b1833ba8ee403b99d20ea1ecce5f.zip
Fix a crash that could occur when cancelling an export (fixes #2192)
Diffstat (limited to 'Source/SPExportController.m')
-rw-r--r--Source/SPExportController.m19
1 files changed, 17 insertions, 2 deletions
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)
{