From: Christopher Baines Date: Mon, 1 Aug 2011 11:27:10 +0000 (+0100) Subject: Only stop on SigInt if the system state is right (still needs more testing). X-Git-Tag: 0.9.0~53^2^2~12 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/17182c0c66630c2fcba938edb5b27668f7495854?ds=sidebyside;hp=1cecd4376cebdd0225ee91707b7630bc35959474 Only stop on SigInt if the system state is right (still needs more testing). More inprovements to the package manager to prevent packages from being configured twice. --- diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 479126658..68d9ca1de 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1066,7 +1066,8 @@ bool pkgDPkgPM::Go(int OutStatusFd) sighandler_t old_SIGINT = signal(SIGINT,SigINT); // Check here for any SIGINT - if (pkgPackageManager::SigINTStop) break; + if (pkgPackageManager::SigINTStop && + (I->Op == Item::Install || I->Op == Item::Remove || I->Op == Item::Purge)) break; // ignore SIGHUP as well (debian #463030) sighandler_t old_SIGHUP = signal(SIGHUP,SIG_IGN); @@ -1315,7 +1316,6 @@ bool pkgDPkgPM::Go(int OutStatusFd) } void SigINT(int sig) { - cout << " -- SIGINT -- " << endl; if (_config->FindB("APT::Immediate-Configure-All",false)) pkgPackageManager::SigINTStop = true; } diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 8bcf3d884..324b7ffba 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -286,6 +286,10 @@ bool pkgPackageManager::ConfigureAll() for (pkgOrderList::iterator I = OList.begin(); I != OList.end(); I++) { PkgIterator Pkg(Cache,*I); + + /* Check if the package has been configured, this can happen if SmartConfigure + calls its self */ + if (List->IsFlag(Pkg,pkgOrderList::Configured)) continue; if (ConfigurePkgs == true && SmartConfigure(Pkg) == false) { _error->Error("Internal error, packages left unconfigured. %s",Pkg.Name()); @@ -415,6 +419,9 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg) static std::string const conf = _config->Find("PackageManager::Configure","all"); static bool const ConfigurePkgs = (conf == "all" || conf == "smart"); + if (List->IsFlag(Pkg,pkgOrderList::Configured)) + return _error->Error("Internal configure error on '%s'. ",Pkg.Name(),1); + if (ConfigurePkgs == true && Configure(Pkg) == false) return false; @@ -577,6 +584,11 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate) if (Cache[Pkg].InstallVer != *I || (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)) continue; + + if (List->IsFlag(Pkg,pkgOrderList::Configured)) { + Bad = false; + continue; + } if (Debug) clog << "Trying to SmartConfigure " << Pkg.Name() << endl;