mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-27 10:09:43 -05:00
Merge remote-tracking branch 'origin/mdb.master'
This commit is contained in:
commit
1f6f4f4f28
1 changed files with 26 additions and 1 deletions
|
|
@ -70,6 +70,15 @@
|
|||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#if defined(__mips) && defined(__linux)
|
||||
/* MIPS has cache coherency issues, requires explicit cache control */
|
||||
#include <asm/cachectl.h>
|
||||
extern int cacheflush(char *addr, int nbytes, int cache);
|
||||
#define CACHEFLUSH(addr, bytes, cache) cacheflush(addr, bytes, cache)
|
||||
#else
|
||||
#define CACHEFLUSH(addr, bytes, cache)
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
|
|
@ -3581,6 +3590,11 @@ done:
|
|||
if (env->me_txns)
|
||||
env->me_txns->mti_txnid = txn->mt_txnid;
|
||||
|
||||
/* MIPS has cache coherency issues, this is a no-op everywhere else */
|
||||
if (!(env->me_flags & MDB_WRITEMAP)) {
|
||||
CACHEFLUSH(env->me_map, txn->mt_next_pgno * env->me_psize, DCACHE);
|
||||
}
|
||||
|
||||
return MDB_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
@ -5341,8 +5355,10 @@ mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op)
|
|||
if (op == MDB_PREV || op == MDB_PREV_DUP) {
|
||||
rc = mdb_cursor_prev(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_PREV);
|
||||
if (op != MDB_PREV || rc != MDB_NOTFOUND) {
|
||||
if (rc == MDB_SUCCESS)
|
||||
if (rc == MDB_SUCCESS) {
|
||||
MDB_GET_KEY(leaf, key);
|
||||
mc->mc_flags &= ~C_EOF;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -5819,6 +5835,15 @@ fetchm:
|
|||
rc = MDB_INCOMPATIBLE;
|
||||
break;
|
||||
}
|
||||
{
|
||||
MDB_node *leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]);
|
||||
if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) {
|
||||
MDB_GET_KEY(leaf, key);
|
||||
if (data)
|
||||
rc = mdb_node_read(mc->mc_txn, leaf, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) {
|
||||
rc = EINVAL;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue