int ret;
ret = tdb1_lock_list(tdb, list, ltype, TDB_LOCK_WAIT);
- if (ret) {
+ /* Don't log for EAGAIN and EINTR: they could have overridden lock fns */
+ if (ret && errno != EAGAIN && errno != EINTR) {
tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
"tdb1_lock failed on list %d "
"ltype=%d (%s)", list, ltype, strerror(errno));
contention - it cannot guarantee how many records will be locked */
int tdb1_chainlock(struct tdb1_context *tdb, TDB_DATA key)
{
- int ret = tdb1_lock(tdb, TDB1_BUCKET(tdb->hash_fn(&key)), F_WRLCK);
+ int ret = tdb1_lock(tdb,
+ TDB1_BUCKET(tdb_hash(tdb, key.dptr, key.dsize)),
+ F_WRLCK);
return ret;
}
int tdb1_chainunlock(struct tdb1_context *tdb, TDB_DATA key)
{
- return tdb1_unlock(tdb, TDB1_BUCKET(tdb->hash_fn(&key)), F_WRLCK);
+ return tdb1_unlock(tdb, TDB1_BUCKET(tdb_hash(tdb, key.dptr, key.dsize)),
+ F_WRLCK);
}
int tdb1_chainlock_read(struct tdb1_context *tdb, TDB_DATA key)
{
int ret;
- ret = tdb1_lock(tdb, TDB1_BUCKET(tdb->hash_fn(&key)), F_RDLCK);
+ ret = tdb1_lock(tdb, TDB1_BUCKET(tdb_hash(tdb, key.dptr, key.dsize)),
+ F_RDLCK);
return ret;
}
int tdb1_chainunlock_read(struct tdb1_context *tdb, TDB_DATA key)
{
- return tdb1_unlock(tdb, TDB1_BUCKET(tdb->hash_fn(&key)), F_RDLCK);
+ return tdb1_unlock(tdb, TDB1_BUCKET(tdb_hash(tdb, key.dptr, key.dsize)),
+ F_RDLCK);
}
/* record lock stops delete underneath */