diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2011-07-15 09:53:38 +0200 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2011-07-15 09:53:38 +0200 |
commit | 6db194289ece36e62cb8dab0aa178209b46c59f2 (patch) | |
tree | 6e1970919929dd3d2d03d343e4ec40ccad22ad66 /apt-pkg/pkgcachegen.cc | |
parent | 35555c1826da5df9f2c06a74f2e91be843ad8142 (diff) | |
parent | 1d08f27046533e36849a63c084f51809be484d8c (diff) |
merged from http://bzr.debian.org/bzr/apt/apt/debian-sid
Diffstat (limited to 'apt-pkg/pkgcachegen.cc')
-rw-r--r-- | apt-pkg/pkgcachegen.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index 8e088ba68..b89c8c0d3 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -1169,16 +1169,32 @@ bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress SPtr<DynamicMMap> Map; if (Writeable == true && CacheFile.empty() == false) { + _error->PushToStack(); unlink(CacheFile.c_str()); CacheF = new FileFd(CacheFile,FileFd::WriteAtomic); fchmod(CacheF->Fd(),0644); Map = CreateDynamicMMap(CacheF, MMap::Public); if (_error->PendingError() == true) - return false; - if (Debug == true) + { + delete CacheF.UnGuard(); + delete Map.UnGuard(); + if (Debug == true) + std::clog << "Open filebased MMap FAILED" << std::endl; + Writeable = false; + if (AllowMem == false) + { + _error->MergeWithStack(); + return false; + } + _error->RevertToStack(); + } + else if (Debug == true) + { + _error->MergeWithStack(); std::clog << "Open filebased MMap" << std::endl; + } } - else + if (Writeable == false || CacheFile.empty() == true) { // Just build it in memory.. Map = CreateDynamicMMap(NULL); |