]> git.saurik.com Git - cydia.git/commitdiff
Epic multi-threading.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 17 Jun 2009 21:57:49 +0000 (21:57 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 30 Sep 2010 07:13:16 +0000 (07:13 +0000)
Cydia.mm
UICaboodle/RVBook.mm
UICaboodle/RVPage.h
UICaboodle/RVPage.mm

index f90aa0bb079ac654c5eb1bbd1405896564635087..879ba998d269249fcbb1ffadce9497d20cc4120b 100644 (file)
--- a/Cydia.mm
+++ b/Cydia.mm
@@ -2178,6 +2178,7 @@ struct PackageNameOrdering :
 }
 
 + (Package *) packageWithIterator:(pkgCache::PkgIterator)iterator withZone:(NSZone *)zone inPool:(apr_pool_t *)pool database:(Database *)database {
+@synchronized ([Database class]) {
     pkgCache::VerIterator version;
 
     _profile(Package$packageWithIterator$GetCandidateVer)
@@ -2193,7 +2194,7 @@ struct PackageNameOrdering :
         inPool:pool
         database:database
     ] autorelease];
-}
+} }
 
 - (pkgCache::PkgIterator) iterator {
     return iterator_;
@@ -2981,11 +2982,12 @@ static NSArray *Finishes_;
 }
 
 - (Package *) packageWithName:(NSString *)name {
+@synchronized ([Database class]) {
     if (static_cast<pkgDepCache *>(cache_) == NULL)
         return nil;
     pkgCache::PkgIterator iterator(cache_->FindPkg([name UTF8String]));
     return iterator.end() ? nil : [Package packageWithIterator:iterator withZone:NULL inPool:pool_ database:self];
-}
+} }
 
 - (Database *) init {
     if ((self = [super init]) != nil) {
@@ -3141,6 +3143,8 @@ static NSArray *Finishes_;
 }
 
 - (void) reloadData { _pooled
+@synchronized ([Database class]) {
+
     @synchronized (self) {
         ++era_;
     }
@@ -3279,7 +3283,7 @@ static NSArray *Finishes_;
 
         _trace();
     }
-}
+} }
 
 - (void) configure {
     NSString *dpkg = [NSString stringWithFormat:@"dpkg --configure -a --status-fd %u", statusfd_];
@@ -6566,9 +6570,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         section = [filtered_ objectAtIndex:(row - 1)];
         name = [section name];
 
-        if (name != nil)
+        if (name != nil) {
+            name = [NSString stringWithString:name];
             title = [[NSBundle mainBundle] localizedStringForKey:Simplify(name) value:nil table:@"Sections"];
-        else {
+        else {
             name = @"";
             title = UCLocalize("NO_SECTION");
         }
index 433de39dedd55dcd4f476d74483d977c71021323..18de2b6d364a5c4d88ec9ea7ba315d6a65a5b5ec 100644 (file)
@@ -65,6 +65,9 @@
     if (toolbar_ != nil)
         [toolbar_ setDelegate:nil];
 
+    for (RVPage *page in pages_)
+        [page setBook:nil];
+
     [pages_ release];
     [navbar_ release];
     [transition_ release];
index 7aebba2db5fe6003c5492c526b183f9f2493ebf3..18e3dd4c0085868f31adad77abe3add743dfcab8 100644 (file)
@@ -35,5 +35,6 @@
 - (id) initWithBook:(RVBook *)book;
 
 - (void) setDelegate:(id)delegate;
+- (void) setBook:(RVBook *)book;
 
 @end
index 770075588a9adf9262f680e028147121622b9226..9d77a86134decbd4e0eb859554e0002d19bccbed 100644 (file)
@@ -76,4 +76,8 @@
     delegate_ = delegate;
 }
 
+- (void) setBook:(RVBook *)book {
+    book_ = book;
+}
+
 @end