- /* FIXME: Should we do header_uptodate and return retry here? */
- return tdb_nest_lock(tdb, TDB_HASH_LOCK_START + list, ltype, waitflag);
+ if (tdb_has_free_lock(tdb)) {
+ tdb->ecode = TDB_ERR_LOCK;
+ tdb->log(tdb, TDB_DEBUG_ERROR, tdb->log_priv,
+ "tdb_lock_hashes: have free lock already\n");
+ return -1;
+ }
+
+ if (tdb_has_expansion_lock(tdb)) {
+ tdb->ecode = TDB_ERR_LOCK;
+ tdb->log(tdb, TDB_DEBUG_ERROR, tdb->log_priv,
+ "tdb_lock_hashes: have expansion lock already\n");
+ return -1;
+ }
+
+ return tdb_nest_lock(tdb, lock, ltype, waitflag);