Browse Source

remove invalid pkgcache.bin and rebuild it if possible

The next invocation of APT tried to load an outdated big
(and possible io-cold) file just to end up rebuilding it
(possibly only as non-root in memory again and again), so
we remove it here and if we have a srcpkgcache we are
going to rebuild, too.
debian/1.8.y
David Kalnischkies 11 years ago
parent
commit
388f296266
  1. 19
      apt-pkg/deb/dpkgpm.cc
  2. 1
      debian/changelog

19
apt-pkg/deb/dpkgpm.cc

@ -14,8 +14,8 @@
#include <apt-pkg/depcache.h>
#include <apt-pkg/pkgrecords.h>
#include <apt-pkg/strutl.h>
#include <apti18n.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/cachefile.h>
#include <unistd.h>
#include <stdlib.h>
@ -1269,6 +1269,23 @@ bool pkgDPkgPM::Go(int OutStatusFd)
if (RunScripts("DPkg::Post-Invoke") == false)
return false;
if (_config->FindB("Debug::pkgDPkgPM",false) == false)
{
std::string const oldpkgcache = _config->FindFile("Dir::cache::pkgcache");
if (oldpkgcache.empty() == false && RealFileExists(oldpkgcache) == true &&
unlink(oldpkgcache.c_str()) == 0)
{
std::string const srcpkgcache = _config->FindFile("Dir::cache::srcpkgcache");
if (srcpkgcache.empty() == false && RealFileExists(srcpkgcache) == true)
{
_error->PushToStack();
pkgCacheFile CacheFile;
CacheFile.BuildCaches(NULL, true);
_error->RevertToStack();
}
}
}
Cache.writeStateFile(NULL);
return true;
}

1
debian/changelog

@ -30,6 +30,7 @@ apt (0.8.14.2) UNRELEASED; urgency=low
- let VisitRProvides report if the calls were successful
* apt-pkg/deb/dpkgpm.cc:
- replace obsolete usleep with nanosleep
- remove invalid pkgcache.bin and rebuild it if possible
* debian/apt{,-utils}.symbols:
- update both experimental symbol-files to reflect 0.8.14 state
* debian/rules:

Loading…
Cancel
Save