Full_Name: Tamás Kenéz Version: LMDB 8eef7a42 OS: windows 7 URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (82.141.191.242)
Using the LMDB library (commit 8eef7a4275eda) on windows 7:
To reproduce: Run mtest multiple times. The test sometimes fails with the with the windows error code 487 (ERROR_INVALID_ADDRESS) in mdb_env_open -> mdb_env_open2 at this line
env->me_map = MapViewOfFileEx(mh, flags & MDB_WRITEMAP ? FILE_MAP_WRITE : FILE_MAP_READ, 0, 0, env->me_mapsize, meta.mm_address);
The reason is that when windows fails to map at the specified address (meta.mm_address) it returns 0.
I tried this quick workaround:
if ( !env->me_map ) env->me_map = MapViewOfFileEx(mh, flags & MDB_WRITEMAP ? FILE_MAP_WRITE : FILE_MAP_READ, 0, 0, env->me_mapsize, NULL);
which does return valid address, but then it fails later here:
else if (meta.mm_address && env->me_map != meta.mm_address) { /* Can happen because the address argument to mmap() is just a * hint. mmap() can pick another, e.g. if the range is in use. * The MAP_FIXED flag would prevent that, but then mmap could * instead unmap existing pages to make room for the new map. */ return EBUSY; /* TODO: Make a new MDB_* error code? */