]> git.saurik.com Git - cydia.git/commitdiff
Do not lock the dpkg status database (this is OK).
authorJay Freeman (saurik) <saurik@saurik.com>
Thu, 2 Jul 2015 14:47:43 +0000 (07:47 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 2 Jul 2015 14:47:43 +0000 (07:47 -0700)
MobileCydia.mm

index f39543ed3c4c09b5ef6898758aff54950292ca91..612cd23e3cb83f144c6a07ea03722e98f94d3b07 100644 (file)
@@ -1103,6 +1103,7 @@ typedef std::map< unsigned long, _H<Source> > SourceMap;
     CYPool pool_;
 
     unsigned era_;
+    _H<NSDate> delock_;
 
     pkgCacheFile cache_;
     pkgDepCache::Policy *policy_;
@@ -1507,6 +1508,10 @@ static void PackageImport(const void *key, const void *value, void *context) {
 }
 // }}}
 
+static NSDate *GetStatusDate() {
+    return [[[NSFileManager defaultManager] attributesOfItemAtPath:@"/var/lib/dpkg/status" error:NULL] fileModificationDate];
+}
+
 static void SaveConfig(NSObject *lock) {
     @synchronized (lock) {
         _trace();
@@ -3830,7 +3835,7 @@ class CydiaLogCleaner :
     }
     _end
 
-    _root(_system->Lock());
+    delock_ = GetStatusDate();
 
     _trace();
     OpProgress progress;
@@ -3867,7 +3872,6 @@ class CydiaLogCleaner :
             }
         }
 
-        _system->UnLock();
         return;
     }
     _trace();
@@ -4096,7 +4100,13 @@ class CydiaLogCleaner :
     if (substrate)
         RestartSubstrate_ = true;
 
-    _system->UnLock();
+    if (![delock_ isEqual:GetStatusDate()]) {
+        [delegate_ addProgressEventOnMainThread:[CydiaProgressEvent eventWithMessage:UCLocalize("DPKG_LOCKED") ofType:kCydiaProgressEventTypeError] forTask:title];
+        return;
+    }
+
+    delock_ = nil;
+
     pkgPackageManager::OrderResult result(manager_->DoInstall(statusfd_));
     if ([self popErrorWithTitle:title])
         return;
@@ -4123,6 +4133,10 @@ class CydiaLogCleaner :
         [self update];
 }
 
+- (bool) delocked {
+    return ![delock_ isEqual:GetStatusDate()];
+}
+
 - (bool) upgrade {
     NSString *title(UCLocalize("UPGRADE"));
     if ([self popErrorWithTitle:title forOperation:pkgDistUpgrade(cache_)])
@@ -9688,6 +9702,9 @@ _end
             [appcache_ reloadURLWithCache:YES];
         }
     }
+
+    if ([database_ delocked])
+        [self reloadData];
 }
 
 - (void) setConfigurationData:(NSString *)data {