mirror of
https://github.com/samba-team/samba.git
synced 2025-01-29 21:47:30 +03:00
r22422: merged tdb changes from ctdb
This commit is contained in:
parent
3633f862b9
commit
a0ff739bca
@ -3,7 +3,7 @@
|
||||
rm -rf autom4te.cache
|
||||
rm -f configure config.h.in
|
||||
|
||||
IPATHS="-I libreplace -I lib/replace -I ../libreplace -I ../replace"
|
||||
IPATHS="-I libreplace -I lib/replace -I ../libreplace -I ../replace -I ../lib/replace"
|
||||
autoconf $IPATHS || exit 1
|
||||
autoheader $IPATHS || exit 1
|
||||
|
||||
|
@ -105,7 +105,7 @@ int tdb_brlock_upgrade(struct tdb_context *tdb, tdb_off_t offset, size_t len)
|
||||
|
||||
|
||||
/* lock a list in the database. list -1 is the alloc list */
|
||||
int tdb_lock(struct tdb_context *tdb, int list, int ltype)
|
||||
static int _tdb_lock(struct tdb_context *tdb, int list, int ltype, int op)
|
||||
{
|
||||
struct tdb_lock_type *new_lck;
|
||||
int i;
|
||||
@ -158,10 +158,8 @@ int tdb_lock(struct tdb_context *tdb, int list, int ltype)
|
||||
|
||||
/* Since fcntl locks don't nest, we do a lock for the first one,
|
||||
and simply bump the count for future ones */
|
||||
if (tdb->methods->tdb_brlock(tdb,FREELIST_TOP+4*list,ltype,F_SETLKW,
|
||||
if (tdb->methods->tdb_brlock(tdb,FREELIST_TOP+4*list,ltype, op,
|
||||
0, 1)) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_lock failed on list %d "
|
||||
"ltype=%d (%s)\n", list, ltype, strerror(errno)));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -175,6 +173,25 @@ int tdb_lock(struct tdb_context *tdb, int list, int ltype)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* lock a list in the database. list -1 is the alloc list */
|
||||
int tdb_lock(struct tdb_context *tdb, int list, int ltype)
|
||||
{
|
||||
int ret;
|
||||
ret = _tdb_lock(tdb, list, ltype, F_SETLKW);
|
||||
if (ret) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_lock failed on list %d "
|
||||
"ltype=%d (%s)\n", list, ltype, strerror(errno)));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* lock a list in the database. list -1 is the alloc list. non-blocking lock */
|
||||
int tdb_lock_nonblock(struct tdb_context *tdb, int list, int ltype)
|
||||
{
|
||||
return _tdb_lock(tdb, list, ltype, F_SETLK);
|
||||
}
|
||||
|
||||
|
||||
/* unlock the database: returns void because it's too late for errors. */
|
||||
/* changed to return int it may be interesting to know there
|
||||
has been an error --simo */
|
||||
@ -351,6 +368,14 @@ int tdb_chainlock(struct tdb_context *tdb, TDB_DATA key)
|
||||
return tdb_lock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);
|
||||
}
|
||||
|
||||
/* lock/unlock one hash chain, non-blocking. This is meant to be used
|
||||
to reduce contention - it cannot guarantee how many records will be
|
||||
locked */
|
||||
int tdb_chainlock_nonblock(struct tdb_context *tdb, TDB_DATA key)
|
||||
{
|
||||
return tdb_lock_nonblock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);
|
||||
}
|
||||
|
||||
int tdb_chainunlock(struct tdb_context *tdb, TDB_DATA key)
|
||||
{
|
||||
return tdb_unlock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);
|
||||
|
@ -206,7 +206,7 @@ tdb_off_t tdb_find_lock_hash(struct tdb_context *tdb, TDB_DATA key, u32 hash, in
|
||||
struct list_struct *rec);
|
||||
void tdb_io_init(struct tdb_context *tdb);
|
||||
int tdb_expand(struct tdb_context *tdb, tdb_off_t size);
|
||||
int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t off,
|
||||
struct list_struct *rec);
|
||||
int rec_free_read(struct tdb_context *tdb, tdb_off_t off,
|
||||
struct list_struct *rec);
|
||||
|
||||
|
||||
|
@ -134,6 +134,7 @@ int tdb_get_flags(struct tdb_context *tdb);
|
||||
|
||||
/* Low level locking functions: use with care */
|
||||
int tdb_chainlock(struct tdb_context *tdb, TDB_DATA key);
|
||||
int tdb_chainlock_nonblock(struct tdb_context *tdb, TDB_DATA key);
|
||||
int tdb_chainunlock(struct tdb_context *tdb, TDB_DATA key);
|
||||
int tdb_chainlock_read(struct tdb_context *tdb, TDB_DATA key);
|
||||
int tdb_chainunlock_read(struct tdb_context *tdb, TDB_DATA key);
|
||||
|
@ -214,7 +214,7 @@ static void merge_test(void)
|
||||
key.dptr = keys[3];
|
||||
tdb_delete(db, key);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, const char *argv[])
|
||||
{
|
||||
int i, seed=0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user