X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ffree.c;h=565bc69e03570d5393dd45c0dcec43f8cf7a2ef5;hb=6804501c350181dea8f531142b28c620b70edbd9;hp=efc29e884ea2078c54ed28616b9d0cdce1228ac1;hpb=32710c917e41b6a283ab73190614623c1a8e9508;p=ccan diff --git a/ccan/tdb2/free.c b/ccan/tdb2/free.c index efc29e88..565bc69e 100644 --- a/ccan/tdb2/free.c +++ b/ccan/tdb2/free.c @@ -510,10 +510,10 @@ int set_header(struct tdb_context *tdb, { uint64_t keybits = (fls64(keylen) + 1) / 2; - /* Use top bits of hash, so it's independent of hash table size. */ + /* Use bottom bits of hash, so it's independent of hash table size. */ rec->magic_and_meta = zone_bits - | ((hash >> 59) << 6) + | ((hash & ((1 << 5)-1)) << 6) | ((actuallen - (keylen + datalen)) << 11) | (keybits << 43) | (TDB_MAGIC << 48); @@ -654,8 +654,8 @@ tdb_off_t alloc(struct tdb_context *tdb, size_t keylen, size_t datalen, tdb_len_t size, actual; struct tdb_used_record rec; - /* We don't want header to change during this! */ - assert(tdb->header_uptodate); + /* We can't hold pointers during this: we could unmap! */ + assert(!tdb->direct_access); size = adjust_size(keylen, datalen, growing);