diff options
-rw-r--r-- | lib/tdb/common/lock.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/tdb/common/lock.c b/lib/tdb/common/lock.c index b1153b2e6f..8401cb7f8f 100644 --- a/lib/tdb/common/lock.c +++ b/lib/tdb/common/lock.c @@ -631,11 +631,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); } |