diff options
author | Greg Hudson <ghudson@mit.edu> | 2012-10-16 20:09:51 -0400 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2012-10-16 20:09:51 -0400 |
commit | e03a59074017dde6e0c524efcba9476aec064d17 (patch) | |
tree | 02f631727efc20e94c99850a4d05bd514640859f /src/plugins | |
parent | 9f19a10466b0e85929babaa256146bf4f75f9125 (diff) | |
download | krb5-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.c | 25 |
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; |