(do_ypcall): Add one missing unlock. Simplify the code a bit.
authordrepper <drepper>
Sat, 25 Sep 2004 05:54:39 +0000 (05:54 +0000)
committerdrepper <drepper>
Sat, 25 Sep 2004 05:54:39 +0000 (05:54 +0000)
nis/ypclnt.c

index 184e49d..f25c7c7 100644 (file)
@@ -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);