X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb%2Ftdb.c;h=d43418033e7fcc32ea5648b4ac5c2672568e26b8;hb=3f011090d857a625f9eccfca6dd33d1b897417a8;hp=cb2af49f8f9f7b8bb29c4f86d0624712579543ea;hpb=bcf7916c5d694858766869dfd570e525127154a6;p=ccan diff --git a/ccan/tdb/tdb.c b/ccan/tdb/tdb.c index cb2af49f..d4341803 100644 --- a/ccan/tdb/tdb.c +++ b/ccan/tdb/tdb.c @@ -59,13 +59,14 @@ static void tdb_increment_seqnum(struct tdb_context *tdb) return; } - if (tdb_brlock(tdb, TDB_SEQNUM_OFS, F_WRLCK, F_SETLKW, 1, 1) != 0) { + if (tdb_brlock(tdb, F_WRLCK, TDB_SEQNUM_OFS, 1, + TDB_LOCK_WAIT|TDB_LOCK_PROBE) != 0) { return; } tdb_increment_seqnum_nonblock(tdb); - tdb_brlock(tdb, TDB_SEQNUM_OFS, F_UNLCK, F_SETLKW, 1, 1); + tdb_brunlock(tdb, F_WRLCK, TDB_SEQNUM_OFS, 1); } static int tdb_key_compare(TDB_DATA key, TDB_DATA data, void *private_data) @@ -160,7 +161,7 @@ static int tdb_update_hash(struct tdb_context *tdb, TDB_DATA key, uint32_t hash, * then the TDB_DATA will have zero length but * a non-zero pointer */ -static TDB_DATA do_tdb_fetch(struct tdb_context *tdb, TDB_DATA key) +static TDB_DATA _tdb_fetch(struct tdb_context *tdb, TDB_DATA key) { tdb_off_t rec_ptr; struct list_struct rec; @@ -181,7 +182,7 @@ static TDB_DATA do_tdb_fetch(struct tdb_context *tdb, TDB_DATA key) TDB_DATA tdb_fetch(struct tdb_context *tdb, TDB_DATA key) { - TDB_DATA ret = do_tdb_fetch(tdb, key); + TDB_DATA ret = _tdb_fetch(tdb, key); tdb_trace_1rec_retrec(tdb, "tdb_fetch", key, ret); return ret; @@ -446,8 +447,8 @@ static tdb_off_t tdb_find_dead(struct tdb_context *tdb, uint32_t hash, return 0; } -static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, - int flag, uint32_t hash) +static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, + TDB_DATA dbuf, int flag, uint32_t hash) { struct list_struct rec; tdb_off_t rec_ptr; @@ -613,7 +614,7 @@ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf) if (tdb_lock(tdb, BUCKET(hash), F_WRLCK) == -1) return -1; - dbuf = do_tdb_fetch(tdb, key); + dbuf = _tdb_fetch(tdb, key); if (dbuf.dptr == NULL) { dbuf.dptr = (unsigned char *)malloc(new_dbuf.dsize);