https://bugs.openldap.org/show_bug.cgi?id=10138
--- Comment #9 from Howard Chu hyc@openldap.org --- (In reply to kero from comment #8)
As long as nothing changes any of the write txn's state, you should be fine.
Do you mean that it can be fine even if I use the encryption feature?
No. Accessing records will cycle pages through the cache, thus changing the write txn's state.
Note that if you wrote a lot of data in the txn, some dirty pages may have been flushed to make room for newer writes. In that case, any pointers to those flushed pages would be invalid. In that case, you'd have to use cursors to read the data reliably.
Do you mean it is unreliable to keep the data pointers coming from a read-only cursor if I wrote a lot of data into it? Even if I collect those data pointers AFTER I have finished writing entries into the database?
Ah, if you used a cursor to enumerate the data pointers after all writes were done, then it'll be fine.
Because, according to the documentation, my solution is valid in the sense that no updates are performed while I iterate on the database entries. Therefore the threads are reading frozen pointers to the mmap area.
Values returned from the database are valid only until a subsequent update operation, or the end of the transaction.