summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--nis/ypclnt.c16
2 files changed, 10 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index be347769f4..d717f84220 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2004-09-24 Ulrich Drepper <drepper@redhat.com>
+ * nis/ypclnt.c (do_ypcall): Add one missing unlock. Simplify the
+ code a bit.
+
* misc/daemon.c (daemon): Define errno in case /dev/null is not
the correct device.
diff --git a/nis/ypclnt.c b/nis/ypclnt.c
index 184e49de6d..f25c7c710b 100644
--- a/nis/ypclnt.c
+++ b/nis/ypclnt.c
@@ -304,16 +304,10 @@ do_ypcall (const char *domain, u_long prog, xdrproc_t xargs,
status = YPERR_YPERR;
__libc_lock_lock (ypbindlist_lock);
- if (__ypbindlist != NULL)
+ ydb = __ypbindlist;
+ while (ydb != NULL)
{
- ydb = __ypbindlist;
- while (ydb != NULL)
- {
- if (strcmp (domain, ydb->dom_domain) == 0)
- break;
- ydb = ydb->dom_pnext;
- }
- if (ydb != NULL)
+ if (strcmp (domain, ydb->dom_domain) == 0)
{
if (__yp_bind (domain, &ydb) == 0)
{
@@ -322,6 +316,7 @@ do_ypcall (const char *domain, u_long prog, xdrproc_t xargs,
resp, &ydb, 0);
if (status == YPERR_SUCCESS)
{
+ __libc_lock_unlock (ypbindlist_lock);
__set_errno (saved_errno);
return status;
}
@@ -329,7 +324,10 @@ do_ypcall (const char *domain, u_long prog, xdrproc_t xargs,
/* We use ypbindlist, and the old cached data is
invalid. unbind now and create a new binding */
yp_unbind_locked (domain);
+
+ break;
}
+ ydb = ydb->dom_pnext;
}
__libc_lock_unlock (ypbindlist_lock);