summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/contrib/mmap.cc12
-rw-r--r--debian/changelog2
2 files changed, 13 insertions, 1 deletions
diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc
index f0ab49265..aaa9da44f 100644
--- a/apt-pkg/contrib/mmap.cc
+++ b/apt-pkg/contrib/mmap.cc
@@ -216,7 +216,17 @@ DynamicMMap::DynamicMMap(FileFd &F,unsigned long Flags,unsigned long const &Work
{
if (_error->PendingError() == true)
return;
-
+
+ // disable Moveable if we don't grow
+ if (Grow == 0)
+ this->Flags &= ~Moveable;
+
+#ifndef __linux__
+ // kfreebsd doesn't have mremap, so we use the fallback
+ if ((this->Flags & Moveable) == Moveable)
+ this->Flags |= Fallback;
+#endif
+
unsigned long long EndOfFile = Fd->Size();
if (EndOfFile > WorkSpace)
WorkSpace = EndOfFile;
diff --git a/debian/changelog b/debian/changelog
index ea15159c8..25f658fe3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -14,6 +14,8 @@ apt (0.9.7.3) UNRELEASED; urgency=low
- do not segfault if nothing can be configured to statisfy
a pre-depends (e.g. in a pre-depends loop) (Closes: #681958)
* apt-pkg/contrib/mmap.cc:
+ - trigger the usage of the fallback code for kfreebsd also in the
+ second (filebased) constructor of DynamicMMap (Closes: #677704)
- refer to APT::Cache-Start in case the growing failed as if -Limit is
really the offender it will be noted in a previous error message.