[11169] in Kerberos-V5-bugs
[krbdev.mit.edu #6569] krb5-1.7 hangs on Solaris
daemon@ATHENA.MIT.EDU (Arlene Berry " via RT)
Tue Sep 22 15:57:45 2009
X-Barracuda-Envelope-From: nobody@krbdev.mit.edu
Mail-Followup-To: rt@krbdev.mit.edu
mail-copies-to: never
From: "" Arlene Berry " via RT" <rt-comment@krbdev.MIT.EDU>
In-Reply-To: <rt-6569@krbdev.mit.edu>
Message-ID: <rt-6569-31732.7.35892380647762@krbdev.mit.edu>
To: "'AdminCc of krbdev.mit.edu Ticket #6569'":;"'AdminCc of krbdev.mit.edu Ticket #6569'":;@MIT.EDU
Date: Tue, 22 Sep 2009 19:57:04 +0000 (UTC)
Reply-To: rt-comment@krbdev.MIT.EDU
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: krb5-bugs-bounces@mit.edu
We're seeing hangs on Solaris because krb5-1.7 uses res_init and
res_search from multiple threads. On Solaris, those functions are not
thread safe. To fix it we changed krb5int_dns_init to call res_init
only once and added a mutex around res_search:
Index: src/lib/krb5/os/dnsglue.c
===================================================================
--- src/lib/krb5/os/dnsglue.c (revision 37274)
+++ src/lib/krb5/os/dnsglue.c (working copy)
@@ -63,6 +63,10 @@
static int initparse(struct krb5int_dns_state *);
#endif
+#if !USE_RES_NINIT
+static k5_mutex_t dns_res_lock = K5_MUTEX_PARTIAL_INITIALIZER;
+#endif
+
/*
* krb5int_dns_init()
*
@@ -102,12 +106,24 @@
#if USE_RES_NINIT
memset(&statbuf, 0, sizeof(statbuf));
ret = res_ninit(&statbuf);
-#else
- ret = res_init();
-#endif
if (ret < 0)
return -1;
+#else
+ if (!(_res.options & RES_INIT))
+ {
+ ret = res_init();
+ if (ret < 0)
+ return -1;
+ ret = k5_mutex_finish_init(&dns_res_lock);
+ if (ret < 0)
+ return ret;
+ }
+ ret = k5_mutex_lock(&dns_res_lock);
+ if (ret < 0)
+ return ret;
+#endif
+
do {
p = (ds->ansp == NULL)
? malloc(nextincr) : realloc(ds->ansp, nextincr);
@@ -152,6 +168,8 @@
errout:
#if USE_RES_NINIT
res_ndestroy(&statbuf);
+#else
+ k5_mutex_unlock(&dns_res_lock);
#endif
if (ret < 0) {
if (ds->ansp != NULL) {
_______________________________________________
krb5-bugs mailing list
krb5-bugs@mit.edu
https://mailman.mit.edu/mailman/listinfo/krb5-bugs