pkgSourceList *list_;
SourceMap sources_;
+ CFMutableArrayRef deadSources_;
CFMutableArrayRef packages_;
_transient NSObject<ConfigurationDelegate, ProgressDelegate> *delegate_;
- (void) dealloc {
// XXX: actually implement this thing
_assert(false);
+ if (deadSources_)
+ CFRelease(deadSources_);
[self releasePackages];
apr_pool_destroy(pool_);
NSRecycleZone(zone_);
capacity += 1024;
packages_ = CFArrayCreateMutable(kCFAllocatorDefault, capacity, NULL);
+ deadSources_ = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
int fds[2];
NSMutableArray *sources([NSMutableArray arrayWithCapacity:sources_.size()]);
for (SourceMap::const_iterator i(sources_.begin()); i != sources_.end(); ++i)
[sources addObject:i->second];
+ [sources addObjectsFromArray:(NSArray *)deadSources_];
return sources;
}
++era_;
[self releasePackages];
+
sources_.clear();
+ CFArrayRemoveAllValues(deadSources_);
_error->Discard();
}
for (pkgSourceList::const_iterator source = list_->begin(); source != list_->end(); ++source) {
+ bool found = false;
std::vector<pkgIndexFile *> *indices = (*source)->GetIndexFiles();
for (std::vector<pkgIndexFile *>::const_iterator index = indices->begin(); index != indices->end(); ++index)
// XXX: this could be more intelligent
if (dynamic_cast<debPackagesIndex *>(*index) != NULL) {
pkgCache::PkgFileIterator cached((*index)->FindInCache(cache_));
- if (!cached.end())
+ if (!cached.end()) {
sources_[cached->ID] = [[[Source alloc] initWithMetaIndex:*source inPool:pool_] autorelease];
+ found = true;
+ }
}
+ if (!found)
+ CFArrayAppendValue(deadSources_, [[[Source alloc] initWithMetaIndex:*source inPool:pool_] autorelease]);
}
{