X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb.c;h=a2d36b373c4b7d875aeb45e477366a2ae3371972;hb=ce3198f06194b9ccd9a5d7653daa109175e1226b;hp=2a37f13063a4f094162ce3cb6bcd919c342d782e;hpb=6ce40d6ab4dbd63bd76979b8491351708c3df892;p=ccan
diff --git a/ccan/tdb2/tdb.c b/ccan/tdb2/tdb.c
index 2a37f130..a2d36b37 100644
--- a/ccan/tdb2/tdb.c
+++ b/ccan/tdb2/tdb.c
@@ -1,3 +1,20 @@
+ /*
+ Trivial Database 2: fetch, store and misc routines.
+ Copyright (C) Rusty Russell 2010
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 3 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, see .
+*/
#include "private.h"
#include
#include
@@ -38,10 +55,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, true);
if (ecode == TDB_SUCCESS)
ecode = replace_in_hash(tdb, h, new_off);
} else {
@@ -285,12 +303,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, true);
if (tdb->flags & TDB_SEQNUM)
tdb_inc_seqnum(tdb);
@@ -327,6 +346,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 +379,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,