]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* sysdeps/mach/hurd/bind.c (bind): Don't deallocate IFSOCK if we never
authorRoland McGrath <roland@gnu.org>
Tue, 11 Dec 2001 05:04:23 +0000 (05:04 +0000)
committerRoland McGrath <roland@gnu.org>
Tue, 11 Dec 2001 05:04:23 +0000 (05:04 +0000)
set it.

ChangeLog
sysdeps/mach/hurd/bind.c

index db9b160eae6a80f8a5e07becc8b250b3b1814b47..b67a865a4cd476bb24a717370a1a19a59987e8bd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2001-12-10  Roland McGrath  <roland@frob.com>
 
+       * sysdeps/mach/hurd/bind.c (bind): Don't deallocate IFSOCK if we never
+       set it.
+
        * shlib-versions [USE_IN_LIBIO] (.*-.*-gnu-gnu.*): Set default
        set to GLIBC_2.2.5, not GLIBC_2.2.4.
 
index 7077cc921d1294af1730c5466d033f3fc98498ac..f59a44ccda1430e056de5a86896cb1fe80d77057 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+/* Copyright (C) 1992,94,95,96,97,98,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -58,7 +58,6 @@ bind (fd, addrarg, len)
 
       if (! err)
        {
-         file_t ifsock;
          /* Set the node's translator to make it a local-domain socket.  */
          err = __file_set_translator (node,
                                       FS_TRANS_EXCL | FS_TRANS_SET,
@@ -77,26 +76,27 @@ bind (fd, addrarg, len)
          if (! err)
            {
              /* Get a port to the ifsock translator.  */
-             ifsock = __file_name_lookup_under (dir, n, 0, 0);
+             file_t ifsock = __file_name_lookup_under (dir, n, 0, 0);
              if (ifsock == MACH_PORT_NULL)
                {
                  err = errno;
                  /* If we failed, get rid of the node we created.  */
                  __dir_unlink (dir, n);
                }
+             else
+               {
+                 /* Get the address port.  */
+                 err = __ifsock_getsockaddr (ifsock, &aport);
+                 if (err == MIG_BAD_ID || err == EOPNOTSUPP)
+                   /* We are not talking to /hurd/ifsock.  Probably
+                      someone came in after we linked our node, unlinked
+                      it, and replaced it with a different node, before we
+                      did our lookup.  Treat it as if our link had failed
+                      with EEXIST.  */
+                   err = EADDRINUSE;
+               }
+             __mach_port_deallocate (__mach_task_self (), ifsock);
            }
-         if (! err)
-           {
-             /* Get the address port.  */
-             err = __ifsock_getsockaddr (ifsock, &aport);
-             if (err == MIG_BAD_ID || err == EOPNOTSUPP)
-               /* We are not talking to /hurd/ifsock.  Probably someone
-                  came in after we linked our node, unlinked it, and
-                  replaced it with a different node, before we did our
-                  lookup.  Treat it as if our link had failed with EEXIST.  */
-               err = EADDRINUSE;
-           }
-         __mach_port_deallocate (__mach_task_self (), ifsock);
        }
       __mach_port_deallocate (__mach_task_self (), dir);