Index: nfs-utils-1.3.4/utils/gssd/gssd_proc.c =================================================================== --- nfs-utils-1.3.4.orig/utils/gssd/gssd_proc.c +++ nfs-utils-1.3.4/utils/gssd/gssd_proc.c @@ -84,6 +84,7 @@ int num_krb5_enctypes = 0; krb5_enctype *krb5_enctypes = NULL; +static pthread_rwlock_t machine_credential_rwlock = PTHREAD_RWLOCK_INITIALIZER; /* * Parse the supported encryption type information */ @@ -533,6 +534,7 @@ krb5_use_machine_creds(struct clnt_info uid, tgtname); do { + pthread_rwlock_wrlock(&machine_credential_rwlock); gssd_refresh_krb5_machine_credential(clp->servername, NULL, service); /* @@ -545,6 +547,8 @@ krb5_use_machine_creds(struct clnt_info clp->servername); goto out; } + pthread_rwlock_unlock(&machine_credential_rwlock); + pthread_rwlock_rdlock(&machine_credential_rwlock); for (ccname = credlist; ccname && *ccname; ccname++) { u_int min_stat; @@ -583,9 +587,12 @@ krb5_use_machine_creds(struct clnt_info goto out; } } + pthread_rwlock_unlock(&machine_credential_rwlock); } while(!success); + return auth; out: + pthread_rwlock_unlock(&machine_credential_rwlock); return auth; }