[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#7896) macos issue with mdb_env_map



Full_Name: CJS
Version: 0.9.14
OS: MacOS 10.9.4
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (66.6.34.253)


Under MacOS I have compiled lmdb 0.9.14, and I've found that anything using it
reports resources unavailable the second time they try to use a database - this
includes the test scripts. Make test output ends with:

key: 0x10ead7e7c 199 , data: 0x10ead7e80 199 409 foo bar
mdb_env_open failed, error 16 Resource busy
make: *** [test] Error 1

I tracked down the problem to mdb.c, mdb_env_map function, line 3714.

        /* 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.
         */
        if (addr && env->me_map != addr)
                return EBUSY;   /* TODO: Make a new MDB_* error code? */

This expression always evaluates to true when opening an existing database, even
with mdb_env_open is called without the MDB_FIXEDMAP flag, so the open always
fails.

If I commend that check out and rerun make test, it succeeds:

key: 0x103580f84 240 , data: 0x103580f88 240 576 foo bar
Status of Main DB
  Tree depth: 2
  Branch pages: 1
  Leaf pages: 3
  Overflow pages: 0
  Entries: 92

My guess is that this is macos related or someone would have found it before me.


Git blame shows this portion of the code hasn't changed in almost a year.
However other parts of the same function have changed within the last year, so
this could be a result of a recent change.