X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb.c;h=d7b5163be95eba66ac204f1be75dc239350c41f9;hb=5c4a21ab03a428373e7659b9606facf85dcbe17b;hp=2a37f13063a4f094162ce3cb6bcd919c342d782e;hpb=6ce40d6ab4dbd63bd76979b8491351708c3df892;p=ccan diff --git a/ccan/tdb2/tdb.c b/ccan/tdb2/tdb.c index 2a37f130..d7b5163b 100644 --- a/ccan/tdb2/tdb.c +++ b/ccan/tdb2/tdb.c @@ -38,10 +38,11 @@ static enum TDB_ERROR replace_data(struct tdb_context *tdb, /* We didn't like the existing one: remove it. */ if (old_off) { - add_stat(tdb, frees, 1); + tdb->stats.frees++; ecode = add_free_record(tdb, old_off, sizeof(struct tdb_used_record) - + key.dsize + old_room); + + key.dsize + old_room, + TDB_LOCK_WAIT); if (ecode == TDB_SUCCESS) ecode = replace_in_hash(tdb, h, new_off); } else { @@ -285,12 +286,13 @@ enum TDB_ERROR tdb_delete(struct tdb_context *tdb, struct tdb_data key) } /* Free the deleted entry. */ - add_stat(tdb, frees, 1); + tdb->stats.frees++; ecode = add_free_record(tdb, off, sizeof(struct tdb_used_record) + rec_key_length(&rec) + rec_data_length(&rec) - + rec_extra_padding(&rec)); + + rec_extra_padding(&rec), + TDB_LOCK_WAIT); if (tdb->flags & TDB_SEQNUM) tdb_inc_seqnum(tdb); @@ -327,6 +329,9 @@ void tdb_add_flag(struct tdb_context *tdb, unsigned flag) case TDB_SEQNUM: tdb->flags |= TDB_SEQNUM; break; + case TDB_ALLOW_NESTING: + tdb->flags |= TDB_ALLOW_NESTING; + break; default: tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR, @@ -357,6 +362,9 @@ void tdb_remove_flag(struct tdb_context *tdb, unsigned flag) case TDB_SEQNUM: tdb->flags &= ~TDB_SEQNUM; break; + case TDB_ALLOW_NESTING: + tdb->flags &= ~TDB_ALLOW_NESTING; + break; default: tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,