Merge remote-tracking branch 'origin/mdb.master'

This commit is contained in:
Quanah Gibson-Mount 2014-07-31 12:56:49 -05:00
commit 1f6f4f4f28

View file

@ -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;