https://bugs.openldap.org/show_bug.cgi?id=9278

          Issue ID: 9278
           Summary: liblmdb: robust mutexes should not be unmapped
           Product: LMDB
           Version: unspecified
          Hardware: All
                OS: FreeBSD
            Status: UNCONFIRMED
          Severity: normal
          Priority: ---
         Component: liblmdb
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: ---

Created attachment 736
  --> https://bugs.openldap.org/attachment.cgi?id=736&action=edit
A possible workaround

We recently noticed that lmdb would have the memory region containing the
robust mutex unmapped on mdb_env_close0():

munmap((void *)env->me_txns,
(env->me_maxreaders-1)*sizeof(MDB_reader)+sizeof(MDB_txninfo));

Note that if this is the last unmap for a robust mutex, the FreeBSD
implementation would garbage-collect the mutex, making it no longer visible to
other processes.  As the result, a second instance of the attached test.c (from
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=244493 with minor changes)
would trigger the assertion at mdb_txn_begin() because the acquisition of the
mutex would return 22 (EINVAL), because the mutex appeared to be a robust
mutex, but was invalid.

The attached lmdb.diff is a possible workaround for this (it would skip
unmapping when setting up the robust mutex for the first time).

-- 
You are receiving this mail because:
You are on the CC list for the issue.

Reply via email to