krb5 commit: Use blocking locks for policy DB

Greg Hudson ghudson at MIT.EDU
Tue Oct 16 20:25:04 EDT 2012


https://github.com/krb5/krb5/commit/e03a59074017dde6e0c524efcba9476aec064d17
commit e03a59074017dde6e0c524efcba9476aec064d17
Author: Greg Hudson <ghudson at mit.edu>
Date:   Tue Oct 16 20:09:51 2012 -0400

    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

 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 abb0444..447a395 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;


More information about the cvs-krb5 mailing list