From 9faf17435f1f5ce3c7046a738c45b60597838c03 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 30 Aug 2010 22:44:54 +0930 Subject: [PATCH] tdb2: fix valgrind warnings. The unreserved headers were a real bug; the others could cause a false error too. --- ccan/tdb2/lock.c | 19 ++++++++++++------- ccan/tdb2/tdb.c | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ccan/tdb2/lock.c b/ccan/tdb2/lock.c index 14a7b5e5..c7c449ab 100644 --- a/ccan/tdb2/lock.c +++ b/ccan/tdb2/lock.c @@ -255,13 +255,18 @@ static int tdb_nest_lock(struct tdb_context *tdb, tdb_off_t offset, int ltype, { struct tdb_lock_type *new_lck; - if (offset >= TDB_HASH_LOCK_START + (1ULL << tdb->header.v.hash_bits) - + (tdb->header.v.num_zones * (tdb->header.v.free_buckets+1))) { - tdb->ecode = TDB_ERR_LOCK; - tdb->log(tdb, TDB_DEBUG_FATAL, tdb->log_priv, - "tdb_lock: invalid offset %llu for ltype=%d\n", - (long long)offset, ltype); - return -1; + /* Header is not valid for open lock; valgrind complains. */ + if (offset >= TDB_HASH_LOCK_START) { + if (offset > TDB_HASH_LOCK_START + + (1ULL << tdb->header.v.hash_bits) + + (tdb->header.v.num_zones + * (tdb->header.v.free_buckets+1))) { + tdb->ecode = TDB_ERR_LOCK; + tdb->log(tdb, TDB_DEBUG_FATAL, tdb->log_priv, + "tdb_lock: invalid offset %llu ltype=%d\n", + (long long)offset, ltype); + return -1; + } } if (tdb->flags & TDB_NOLOCK) return 0; diff --git a/ccan/tdb2/tdb.c b/ccan/tdb2/tdb.c index 175827e2..7544d7a1 100644 --- a/ccan/tdb2/tdb.c +++ b/ccan/tdb2/tdb.c @@ -147,7 +147,7 @@ static int tdb_new_database(struct tdb_context *tdb) sizeof(newdb.hdr.hash_test), newdb.hdr.hash_seed, tdb->hash_priv); - + memset(newdb.hdr.reserved, 0, sizeof(newdb.hdr.reserved)); newdb.hdr.v.generation = 0; /* The initial zone must cover the initial database size! */ -- 2.39.2