#include <sys/types.h>
#include <unistd.h>
#include <lmdb.h>
+#include <valgrind/memcheck.h>
#include "contrib/cleanup.h"
#include "contrib/macros.h"
for (int i = 0; i < maxcount; ++i) {
/* Convert key structs */
+ VALGRIND_CHECK_MEM_IS_DEFINED(key->data, key->len);
MDB_val _key = val_knot2mdb(key[i]);
MDB_val _val = val_knot2mdb(val[i]);
stats->read++;
}
return ret;
}
+ VALGRIND_CHECK_MEM_IS_DEFINED(_val.mv_data, _val.mv_size);
/* Update the result. */
val[i] = val_mdb2knot(_val);
}
struct kr_cdb_stats *stats)
{
/* Convert key structs and write */
+ VALGRIND_CHECK_MEM_IS_DEFINED(key->data, key->len);
MDB_val _key = val_knot2mdb(*key);
MDB_val _val = val_knot2mdb(*val);
+ if (!(flags & MDB_RESERVE))
+ VALGRIND_CHECK_MEM_IS_DEFINED(val->data, val->len);
+
stats->write++;
int ret = mdb_put(*txn, env->dbi, &_key, &_val, flags);
int deleted = 0;
for (int i = 0; ret == kr_ok() && i < maxcount; ++i) {
+ VALGRIND_CHECK_MEM_IS_DEFINED(keys[i].data, keys[i].len);
MDB_val _key = val_knot2mdb(keys[i]);
MDB_val val = { 0, NULL };
stats->remove++;
return lmdb_error(ret);
}
+ VALGRIND_CHECK_MEM_IS_DEFINED(key->data, key->len);
MDB_val cur_key = val_knot2mdb(*key);
MDB_val cur_val = { 0, NULL };
stats->match++;
int ret = txn_curs_get(env, &curs, stats);
if (ret) return ret;
+ VALGRIND_CHECK_MEM_IS_DEFINED(key->data, key->len);
MDB_val key2_m = val_knot2mdb(*key);
MDB_val val2_m = { 0, NULL };
stats->read_leq++;
stats->read_leq_miss++;
return lmdb_error(ret);
}
+ VALGRIND_CHECK_MEM_IS_DEFINED(key2_m.mv_data, key2_m.mv_size);
+ VALGRIND_CHECK_MEM_IS_DEFINED(val2_m.mv_data, val2_m.mv_size);
/* test for equality //:unlikely */
if (key2_m.mv_size == key->len
&& memcmp(key2_m.mv_data, key->data, key->len) == 0) {