summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2012-10-16 20:09:51 -0400
committerGreg Hudson <ghudson@mit.edu>2012-10-16 20:09:51 -0400
commite03a59074017dde6e0c524efcba9476aec064d17 (patch)
tree02f631727efc20e94c99850a4d05bd514640859f /src/plugins
parent9f19a10466b0e85929babaa256146bf4f75f9125 (diff)
downloadkrb5-e03a59074017dde6e0c524efcba9476aec064d17.tar.gz
krb5-e03a59074017dde6e0c524efcba9476aec064d17.tar.xz
krb5-e03a59074017dde6e0c524efcba9476aec064d17.zip
Use blocking locks for policy DB
In the db2 kdb module, use blocking locks for the policy DB as well as the principal DB. ticket: 7359
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/kdb/db2/adb_openclose.c25
1 files changed, 6 insertions, 19 deletions
diff --git a/src/plugins/kdb/db2/adb_openclose.c b/src/plugins/kdb/db2/adb_openclose.c
index abb04445c..447a395f8 100644
--- a/src/plugins/kdb/db2/adb_openclose.c
+++ b/src/plugins/kdb/db2/adb_openclose.c
@@ -13,8 +13,6 @@
#include <stdlib.h>
#include <db.h>
-#define MAX_LOCK_TRIES 5
-
struct _locklist {
osa_adb_lock_ent lockinfo;
struct _locklist *next;
@@ -212,7 +210,7 @@ osa_adb_fini_db(osa_adb_db_t db, int magic)
krb5_error_code
osa_adb_get_lock(osa_adb_db_t db, int mode)
{
- int tries, gotlock, perm, krb5_mode, ret = 0;
+ int perm, krb5_mode, ret = 0;
if (db->lock->lockmode >= mode) {
/* No need to upgrade lock, just incr refcnt and return */
@@ -234,22 +232,11 @@ osa_adb_get_lock(osa_adb_db_t db, int mode)
return(EINVAL);
}
- for (gotlock = tries = 0; tries < MAX_LOCK_TRIES; tries++) {
- if ((ret = krb5_lock_file(db->lock->context,
- fileno(db->lock->lockfile),
- krb5_mode|KRB5_LOCKMODE_DONTBLOCK)) == 0) {
- gotlock++;
- break;
- } else if (ret == EBADF && mode == KRB5_DB_LOCKMODE_EXCLUSIVE)
- /* tried to exclusive-lock something we don't have */
- /* write access to */
- return OSA_ADB_NOEXCL_PERM;
-
- sleep(1);
- }
-
- /* test for all the likely "can't get lock" error codes */
- if (ret == EACCES || ret == EAGAIN || ret == EWOULDBLOCK)
+ ret = krb5_lock_file(db->lock->context, fileno(db->lock->lockfile),
+ krb5_mode);
+ if (ret == EBADF && mode == KRB5_DB_LOCKMODE_EXCLUSIVE)
+ return OSA_ADB_NOEXCL_PERM;
+ else if (ret == EACCES || ret == EAGAIN || ret == EWOULDBLOCK)
return OSA_ADB_CANTLOCK_DB;
else if (ret != 0)
return ret;