summaryrefslogtreecommitdiffstats
path: root/source/locking/locking.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2001-08-10 20:49:46 +0000
committerJeremy Allison <jra@samba.org>2001-08-10 20:49:46 +0000
commit41837701e4f67d2f8e5436714a7083cb2688abbb (patch)
tree1b5eb99bb68bae9b9cb2f700bfba780ddd69f19c /source/locking/locking.c
parent9675de08c4a38f0be670918b8222b73ca2ca4ab1 (diff)
downloadsamba-41837701e4f67d2f8e5436714a7083cb2688abbb.tar.gz
samba-41837701e4f67d2f8e5436714a7083cb2688abbb.tar.xz
samba-41837701e4f67d2f8e5436714a7083cb2688abbb.zip
Added Mike Davidsons Tru64 ACL patch.
Jeremy.
Diffstat (limited to 'source/locking/locking.c')
-rw-r--r--source/locking/locking.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/source/locking/locking.c b/source/locking/locking.c
index ea9f8b48ba9..b6b563b4e5f 100644
--- a/source/locking/locking.c
+++ b/source/locking/locking.c
@@ -359,18 +359,35 @@ static TDB_DATA locking_key_fsp(files_struct *fsp)
return locking_key(fsp->dev, fsp->inode);
}
+#ifndef LOCK_SHARE_ENTRY_SPIN_COUNT
+#define LOCK_SHARE_ENTRY_SPIN_COUNT 100
+#endif
+
/*******************************************************************
Lock a hash bucket entry.
******************************************************************/
+
BOOL lock_share_entry(connection_struct *conn,
SMB_DEV_T dev, SMB_INO_T inode)
{
+#if 1 /* JRATEST */
+ int count = 0;
+ for (count = 0; count < LOCK_SHARE_ENTRY_SPIN_COUNT; count++)
+ if (tdb_chainlock(tdb, locking_key(dev, inode)) == 0)
+ return True;
+ else
+ DEBUG(0,("lock_share_entry: locking (%d) for dev = %x, inode = %.0f failed with error %s\n",
+ count, (unsigned int)dev, (double)inode, strerror(errno) ));
+ return False;
+#else
return tdb_chainlock(tdb, locking_key(dev, inode)) == 0;
+#endif
}
/*******************************************************************
Unlock a hash bucket entry.
******************************************************************/
+
void unlock_share_entry(connection_struct *conn,
SMB_DEV_T dev, SMB_INO_T inode)
{
@@ -383,7 +400,18 @@ void unlock_share_entry(connection_struct *conn,
******************************************************************/
BOOL lock_share_entry_fsp(files_struct *fsp)
{
+#if 1 /* JRATEST */
+ int count = 0;
+ for (count = 0; count < LOCK_SHARE_ENTRY_SPIN_COUNT; count++)
+ if (tdb_chainlock(tdb, locking_key(fsp->dev, fsp->inode)) == 0)
+ return True;
+ else
+ DEBUG(0,("lock_share_entry_fsp: locking (%d) for dev = %x, inode = %.0f failed with error %s\n",
+ count, (unsigned int)fsp->dev, (double)fsp->inode, strerror(errno) ));
+ return False;
+#else
return tdb_chainlock(tdb, locking_key(fsp->dev, fsp->inode)) == 0;
+#endif
}
/*******************************************************************