[Metakit] Metakit mapped-file bug fix
Jean-Claude Wippler
jcw at equi4.com
Tue Oct 31 12:30:36 CET 2006
Below is a bug fix which I have applied to the Metakit CVS head.
This may have been the cause of a few reports I have had over the
years, which I could never reproduce reliably. I do not know how the
bug manifests itself exactly (Max reported new[] returning a pointer
to inaccessible memory in c4_Column::CopyData),
but a problem this deep in the Metakit code base leads me to
recommend updating to the CVS head where possible. The only case
when this bug does definitely not affect MK is if you use it with
memory-mapping disabled.
I have also applied a bug fix to CVS which I recently discovered when
re-opening a datafile and committing again several times (see the
08-01 entry in CHANGES).
Lastly, I decided to revert to maintaining the CHANGES file manually
again, instead of pointing to the possibly long and sometimes
confusing timeline generated by CVStrac.
Will wrap this all up into a new Metakit 2.4.9.6 release if no-one
else brings up other issues in the next week or so.
-jcw
Begin forwarded message:
> From: Max Kaehn
> Date: October 30, 2006 19:34:23 GMT+01:00
> To: jcw at equi4.com
> Subject: A very subtle Metakit bug, with fix
>
> Ran into an interesting one in column.cpp; in c4_Column::UsesMap(),
> there's a comparison:
>
> ptr_ - Strategy()._mapStart < Strategy()._dataSize;
>
> This can go wrong in the following circumstance (which I have only
> observed intermittently on Linux 2.6 using gcc 3.3.3):
>
> 1. mmap puts a file at a low address like 0x100000.
> 2. malloc puts a buffer at a high address like 0xb8000000.
> 3. The difference between a malloc'd address and the mmap'd
> address is more than 2 gigabytes, so it comes out negative.
> This is, of course, less than Strategy()._dataSize, so
> c4_Column::UsesMap() returns true for a buffer that
> doesn't actually use the map.
>
> The fix:
> ptr_ < (Strategy()._mapStart + Strategy()._dataSize);
>
> Thanks for all your work on the database.
More information about the Metakit
mailing list