X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb%2Flock.c;h=2a681efc9963afa9e2e3db7b7122f7e7beb3c65e;hp=a59ba365213e473630617ee69ff1f238585d6782;hb=f4ed21278307cb2af87f811c3f509d11a4221d2f;hpb=c4a9fd1b01822e75da853d3f3229de5d35409e31 diff --git a/ccan/tdb/lock.c b/ccan/tdb/lock.c index a59ba365..2a681efc 100644 --- a/ccan/tdb/lock.c +++ b/ccan/tdb/lock.c @@ -662,11 +662,20 @@ int tdb_write_lock_record(struct tdb_context *tdb, tdb_off_t off) for (i = &tdb->travlocks; i; i = i->next) if (i->off == off) return -1; + if (tdb->allrecord_lock.count) { + if (tdb->allrecord_lock.ltype == F_WRLCK) { + return 0; + } + return -1; + } return tdb->methods->brlock(tdb, F_WRLCK, off, 1, TDB_LOCK_NOWAIT|TDB_LOCK_PROBE); } int tdb_write_unlock_record(struct tdb_context *tdb, tdb_off_t off) { + if (tdb->allrecord_lock.count) { + return 0; + } return tdb->methods->brunlock(tdb, F_WRLCK, off, 1); }