diff options
Diffstat (limited to 'cmdline/apt-get.cc')
-rw-r--r-- | cmdline/apt-get.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index cdefd0034..591e0ff1a 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1380,6 +1380,15 @@ bool DoUpgrade(CommandLine &CmdL) /* Install named packages */ bool DoInstall(CommandLine &CmdL) { + // Lock the list directory + FileFd Lock; + if (_config->FindB("Debug::NoLocking",false) == false) + { + Lock.Fd(GetLock(_config->FindDir("Dir::State::Lists") + "lock")); + if (_error->PendingError() == true) + return _error->Error(_("Unable to lock the list directory")); + } + CacheFile Cache; if (Cache.OpenForInstall() == false || Cache.CheckDeps(CmdL.FileSize() != 1) == false) @@ -1580,8 +1589,8 @@ bool DoInstall(CommandLine &CmdL) { pkgCache::PkgIterator I(Cache,Cache.List[J]); - /* Just look at the ones we want to install */ - if ((*Cache)[I].Install() == false) + /* Just look at the ones we want to install but skip all already selected */ + if ((*Cache)[I].Install() == false || (*Cache)[I].NewInstall() == true) continue; for (pkgCache::VerIterator V = I.VersionList(); V.end() == false; V++) |