From b0659bacf9d3ab250a07f11b94f33df325bb832f Mon Sep 17 00:00:00 2001
From: Mitchell Livingston <livings124@transmissionbt.com>
Date: Sat, 30 Jul 2011 00:11:29 +0000
Subject: [PATCH] slightly better locking in the file table

---
 macosx/FileOutlineController.h |  2 +-
 macosx/FileOutlineController.m | 22 ++++++++++++++++------
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/macosx/FileOutlineController.h b/macosx/FileOutlineController.h
index 0f61988b6..473e5d9b3 100644
--- a/macosx/FileOutlineController.h
+++ b/macosx/FileOutlineController.h
@@ -36,7 +36,7 @@
     
     NSString * fFilterText;
     
-    NSLock * fLock;
+    NSRecursiveLock * fLock;
 }
 
 - (FileOutlineView *) outlineView;
diff --git a/macosx/FileOutlineController.m b/macosx/FileOutlineController.m
index 0078e6a18..e00ac5e6f 100644
--- a/macosx/FileOutlineController.m
+++ b/macosx/FileOutlineController.m
@@ -70,7 +70,7 @@ typedef enum
     [fOutline setMenu: [self menu]];
     
     #warning needed?
-    fLock = [[NSLock alloc] init];
+    fLock = [[NSRecursiveLock alloc] init];
     
     [self setTorrent: nil];
 }
@@ -109,21 +109,25 @@ typedef enum
 
 - (void) setFilterText: (NSString *) text
 {
-    [fLock lock];
-    
     if ([text isEqualToString: @""])
         text = nil;
     
     if ((!text && !fFilterText) || (text && fFilterText && [text isEqualToString: fFilterText]))
     {
-        [fLock unlock];
         return;
     }
     
     const BOOL onLion = [NSApp isOnLionOrBetter];
     
+    [fLock lock];
+    
     if (onLion)
+    {
+        [[NSAnimationContext currentContext] setCompletionHandler: ^{ [fLock unlock]; NSLog(@"called"); }];
+        [NSAnimationContext beginGrouping];
+        
         [fOutline beginUpdates];
+    }
     
     NSUInteger currentIndex = 0, totalCount = 0;
     NSMutableArray * itemsToAdd = [NSMutableArray array];
@@ -200,14 +204,20 @@ typedef enum
         [fOutline insertItemsAtIndexes: itemsToAddIndexes inParent: nil withAnimation: NSTableViewAnimationSlideUp];
     
     if (onLion)
+    {
         [fOutline endUpdates];
+        
+        [NSAnimationContext endGrouping];
+    }
     else
+    {
         [fOutline reloadData];
     
+        [fLock unlock];
+    }
+    
     [fFilterText release];
     fFilterText = [text retain];
-    
-    [fLock unlock];
 }
 
 - (void) reloadData
-- 
2.40.0